OnClick 获取“a”标签的“id”属性

Posted

技术标签:

【中文标题】OnClick 获取“a”标签的“id”属性【英文标题】:OnClick get "id" attribute of "a" tag 【发布时间】:2013-01-18 09:21:50 【问题描述】:

我在 jQuery Mobile Web 应用程序中有列表视图,此列表视图由以下元素组成:

<li id='search_r'>
    <a href='#' id='$id' class='s_result'></a>
</li>
<li id='search_r'>
    <a href='#' id='$id' class='s_result'></a>
</li>

元素的数量取决于搜索结果的数量,不仅仅是这两个。 当我单击列表视图中的元素时,在这种情况下:

<li></li>

我需要做两件事,一是从这个特定的“li”标签(点击的标签)内的“a”标签中分配“id”属性到我称为“search_r”的全局变量。点击事件工作正常,但要从“a”标签获取属性我无法做到。

这是我的 js:

$("#cc_page").ready(function()
  $("#search_r").live('click', function()
      search_r = $(this).attr('id');
      window.location.href = "http://imes.********.com/app/userpanel.html#sfpp_page";
  );
);

我知道“这个”不是解决方案。我对js真的很陌生,所以这就是为什么我要问这么荒谬的问题:)

【问题讨论】:

多个id='search_r' 是一个no-no .live() 已弃用。请改用.on() 实际上尝试使用 .on() 没有运气。在 jQuery 1.8.2 中它工作得很好。 虽然在下一个原型中,我会尝试仅使用最新且未弃用的函数和方法来整理我所有的 js 和 php 文件。 【参考方案1】:

您遇到的第一个问题是重复的search_r id 属性,这是无效的。这些应该更改为类。此外,您应该将on() 与委托处理程序一起使用,因为live() 已从最新版本的jQuery 中删除。试试这个:

<li class='search_r'>
    <a href='#' id='$id' class='s_result'></a>
</li>
<li class='search_r'>
    <a href='#' id='$id' class='s_result'></a>
</li>
$("#cc_page").on('click', '.search_r', function()
    var search_r = $('a', this).attr('id');
    console.log(search_r); // just to check it works

    // I assume this is just for testing, otherwise leaving the page 
    // immediately on click renders getting the id completely moot.
    //window.location.href = "http://imes.********.com/app/userpanel.html#sfpp_page";
);

我还假设您 HTML 中的 $id 来自某种形式的模板引擎,它会被解释?如果没有,这些也需要变得独一无二。

【讨论】:

【参考方案2】:

window.location.href 导致浏览器发出新请求。当新页面加载时,所有变量都将被重置。

search_r 的目标是什么?

【讨论】:

我正在尝试将此值分配给全局变量:search_r,因此单击结果后,将打开新页面,全局变量中的 id 将用于加载此新页面所需的数据. 全局变量的范围仅限于一个请求/响应。如果您需要将值保持得比这更长,您应该考虑通过查询字符串将其传递到新页面,或者甚至可能更改一些内容以使用 Ajax。 我在下一页使用 ajax 来加载关于 id 找到的 db 记录的信息,但我找不到传递它的方法。我的意思是将该链接中的 id 传递到下一页。使用 php 会很容易,但是因为我需要将所有文件保留为 .html,所以我真的不能使用 php 方法。【参考方案3】:

.live 自 v1.7 起已在 jQuery 中弃用,并已在 v1.9 中删除。

你应该用.on()替换它。

.on 有 2 种用于绑定元素的语法,而 .live 只有 1 种。

如果元素在你绑定的时候已经存在,你可以这样做:

$('.element').on('click', function()
    .......
);

你甚至可以使用简写:

$('.element').click(function()
    .........
);

如果该元素当时不存在,或者会添加新元素(这是.live通常使用的),则需要使用“事件委托”:

$(document).on('click', '.element', function()
    .............
);

注意:您希望绑定到最近的静态元素,而不是总是document

与此同时,如果您将 jQuery 升级到最新版本,jQuery Migrate plugin 可用于恢复 .live() 功能。

【讨论】:

以上是关于OnClick 获取“a”标签的“id”属性的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何获取子标签的IDŀ

关于JS修改a标签的onclick方法后修改的JS方法不能使用的问题?

用 jQuery 获取“onclick”的值?

jquery怎样修改onclick属性值

无法设置未定义或null引用的属性“onclick”

JQuery模拟点击页面上的所有a标签,触发onclick事件