我在jQuery Mobile网络应用程序中有列表视图,此列表视图由以下元素组成:
<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>
我需要做两件事,一件是将“id”attr从这个特定“li”标签(点击的标签)中的“a”标签分配给我称之为“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所以这就是为什么我会问这么荒谬的问题:)
答案 0 :(得分:3)
您遇到的第一个问题是重复的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
来自某种形式的模板引擎,它被解释了吗?如果没有,那些也需要独特。
答案 1 :(得分:1)
.live
已在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()
功能。
答案 2 :(得分:1)
window.location.href
会导致浏览器发出新请求。加载新页面时,将重置任何变量。
search_r
的目标是什么?