2010-04-27 112 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向上冒泡,即使在您重新加載內容並且替換了提交按鈕時也能正常工作。

相關問題