jQuery .on多次触发

时间:2013-07-26 19:18:46

标签: jquery

我正在将此代码用于我的页面。当我单击带有.process_record类的按钮时,它会给我一个警告,但如果我再次点击同一个按钮,它会一次给我2个警报。我不知道为什么它的表现如此。

$(".body .content").on("click", ".process_record", function(e){

        alert("clicked");
        var url = $(this).attr("data-url");
        $.post(url, function(data){
            $(".body .content").html(data);
        },"html");
    })

1 个答案:

答案 0 :(得分:0)

http://jsfiddle.net/MaxPRafferty/z9VFA/

这适合我在上面的小提琴。 html设置为:

<div class="body">
    <div class="content">
        <input type="button" class="process_record" />
    </div>
</div>

我的猜测是你多次设置处理程序,可能是在另一个点击事件中。从您的注释中,您可能正在从ajax加载它时从您的其他页面注入的脚本标记再次执行绑定。您可以通过将脚本标记移动到其他页面上的外部文件来解决此问题,然后当您注入它时,请确保仅加载正文标记,而不是头部或脚本。

代码解决方案是让您的事件解除绑定并在点击时自行重新绑定,以确保每个事件只有一个处理程序:

http://jsfiddle.net/MaxPRafferty/B5UPB/

var clickAction = function(){
    alert("clicked");
    $(".body .content").unbind("click");
    setClick($(".body .content"),clickAction);
}

var setClick = function(target,action){
    target.on("click", ".process_record",action)
}

setClick($(".body .content"),clickAction);

请记住,这将解除$(".body .content")中的所有事件的绑定,因此如果您只想卸载指定的事件,请将解除绑定行更改为$(".body .content").unbind("click",clickAction);