2

我在 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 真的很陌生,所以这就是为什么我要问这么荒谬的问题:)

4

3 回答 3

4

您遇到的第一个问题是重复的search_rid 属性,这是无效的。这些应该更改为类。此外,您应该使用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";
});

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

于 2013-02-03T15:04:53.487 回答
1

.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 插件来恢复功能。.live()

于 2013-02-03T15:03:30.453 回答
1

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

你的目标是search_r什么?

于 2013-02-03T15:05:33.603 回答