Jquery 默认情况下,在第二次单击时不工作
我有以下html代码:Jquery 默认情况下,在第二次单击时不工作,jquery,preventdefault,Jquery,Preventdefault,我有以下html代码: <div> <span>Products per page:</span> <a class="selectview" href="/womens-clothing/shorts?page=1&view=20">20</a> <a class="selectview" href="/womens-clothing/shorts?page=1&view=200">200<
<div>
<span>Products per page:</span>
<a class="selectview" href="/womens-clothing/shorts?page=1&view=20">20</a>
<a class="selectview" href="/womens-clothing/shorts?page=1&view=200">200</a>
<div>
如果我第一次点击任何链接,代码运行良好;我看到了警报,ajax代码运行良好,但是当我第二次单击它时,整个页面被刷新,没有显示任何警报。如果我再次点击它,它就会工作,然后当我再次点击它时,它就会工作,依此类推
我可能做错了什么?我猜
run\u ajax
正在用新的链接替换链接<代码>。单击仅绑定到当时与选择器匹配的元素。新添加的链接不会绑定单击事件
你需要让这些活动“活”起来。使用类似的方法将其绑定:
这将“委派”事件。它将为所有
运行。无论何时将链接添加到DOM,都选择View
链接。如果run\u ajax正在替换链接,您可以包装附加单击处理程序的代码,然后在run\u ajax中,您可以在用新内容替换链接后调用包装器:
var setupClickHandlers = function(container) {
jQuery(container).find('.selectview').click(function (ev) {
ev.preventDefault();
var alink = jQuery(this).attr('href');
var view = getLinkVars(alink)["view"];
var page = jQuery("#currentpageno").val();
alert(alink);
alert(view);
alert(page);
run_ajax(view,page);
});
};
setupClickHandlers(container);
在ajax中运行:
var run_ajax = function(view, page) {
// do your stuff here
// set up click handlers on the new content
setupClickHandlers(container);
}
不确定,但我认为您也应该发布getLinkVars函数的代码?还要检查控制台是否有错误,默认设置是“nt触发”,可能是因为代码中有错误。更常用的语法是
.live('click',function(ev){})
语法,而不是稍微不太流行的.on
语法。实际上,必须对点击事件进行动态绑定,而不是静态绑定,这将在这里起作用。@Mattygabe:。在jQuery 1.7之前,通常使用live
。在jQuery 1.7+中,不推荐使用.live
、以及.bind
和.delegate
。jQuery建议您使用.on
满足所有事件绑定需求.on
应该在人们升级代码后更“受欢迎”。这非常有效,非常感谢,这让我头疼:)@RocketHazmat我知道这是一个老问题,但也许你能帮上忙?我有一个带有可点击tr
的表,在它的td中我有一个按钮,可以点击执行一些操作。。问题是,如果我使用$(文档)。在('click','.moveTo',
上,它确实执行
重定向,但如果我使用$('.moveTo')。在('click',
上,它可以在页面加载时工作,但不能动态工作。当您执行$(文档)时,会出现什么问题?在('code>$)上('click'、'.moveTo'、
事件实际上绑定到文档
。然后每次单击时,它都会检查该单击是否在.moveTo
元素上。感谢您的回答,我使用了Mattygabe的解决方案,效果非常好。谢谢:)哦,我是说火箭的答案:)
var setupClickHandlers = function(container) {
jQuery(container).find('.selectview').click(function (ev) {
ev.preventDefault();
var alink = jQuery(this).attr('href');
var view = getLinkVars(alink)["view"];
var page = jQuery("#currentpageno").val();
alert(alink);
alert(view);
alert(page);
run_ajax(view,page);
});
};
setupClickHandlers(container);
var run_ajax = function(view, page) {
// do your stuff here
// set up click handlers on the new content
setupClickHandlers(container);
}