Jquery 默认情况下,在第二次单击时不工作

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<

我有以下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</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);
}