2010-04-27 114 views
0

我订阅了加载后页面上所有提交按钮上的点击事件。点击时所有按钮都会触发正确的事件,但这只能工作一次。如果您单击某一行中的任意两个按钮,第二个按钮通常会提交表单,而不是运行脚本。我究竟做错了什么?。提交按钮上的点击事件仅触发一次

注意:我使用​​从“myurl”加载表单数据,然后挂接到完整事件中的提交按钮的单击事件。

$(document).ready(function() 
{ 
    //Load user content 
    $("#passcontent").load("myurl", function() 
    { 
     //subscribe to click events for buttons to post the data back 
     $('input[type=submit]').click(function() 
     { 
      return submitClick($(this)); 
     }); 
    }); 
}); 

function submitClick(submitButton) 
{ 
    submitButton.attr("disabled", true); 

    alert(submitButton.closest("form").serialize()); 
    $.post("myurl", 
      submitButton.closest("form").serialize(), 
      function(data) 
      { 
       alert("woop"); 
       $("#passcontent").html(data); 
      }); 

    //Prevent normal form submission process from continuing 
    return false; 
} 

回答

1

我会重新安排你的点击处理程序是这样的:

$(function() { 
    $("#passcontent").load("myurl"); 

    $('input[type=submit]').live('click', function() { 
    $(this).attr("disabled", true);   
    $.post("myurl", $(this).closest("form").serialize(), function(data) { 
     $("#passcontent").html(data); 
    }); 
    return false; 
    }); 
}); 

使用.live('click', func)监听当前和新元素click事件,因为他们冒泡的DOM一样。通过上述操作,您将在DOM的根目录附加一个处理程序,以侦听任何input[type=submit],以便将click向上冒泡,即使在您重新加载内容并且替换了提交按钮时也能正常工作。

相关问题