2010-05-15 117 views
2

我使用搜索按鈕在服務器端創建表格動態並使用Jquery語法返回它。 當我填寫完表單並點擊提交按鈕後,還有另一個.submit()Jquery函數,假設在數據發送到服務器之前被調用來驗證輸入。 但是,由於某種原因,這個函數永遠不會被調用,並且數據是請求被髮送。 在更多的細節:動態創建表格

這是形式的檢索算法按鈕,在服務器端動態創建和「打印」到HTML頁面使用jQuery:

<form action=... name="stockbuyform" class="stockbuyform" method="post"> 
<input type=text value="Insert purchasing amount"> 
<input type="submit" value="Click to purchase"> 
</form> 

這裏是.submit()函數:

$(".stockbuyform").submit(function() { 
    alert("Need to validate purchasing details"); 
} 

但是我點擊購買按鈕,.submit()函數永遠不會被調用。 這是否意味着我不能在第一次調用中使用另一個Jquery調用?

回答

0

我把它搜索的是一個AJAX請求。您需要綁定的表單提交動作AJAX完成後:

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
    $('.result').html(data); 
    $('#target').submit(function() { 
     alert('Handler for .submit() called.'); 
     return false; 
    }); 
    } 
}); 

一些事件可以用.live()http://api.jquery.com/live/被綁定到當前和未來的元素:

$('.button').live('click', function() { 
    // do something. 
}); 

.live()不有一些限制(見鏈接文檔):

  • 它不能在本地DOM元素 工作,所以$( '表')生活( '點擊', 功能(){});將無法工作。
  • 它不能鏈接,如 $('。somediv')。next()。live('click', function(){});將無法工作。

.delegate()方法應該是緩解這些限制,但據我所知它有自己的侷限性。我其實沒有用過這個......沒有必要。從文檔:

代表是使用 的.live()方法,從而允許爲每個 到 特定的DOM元素事件代理的綁定的替代方案。

您還可以在JQuery的結合在AJAX成功/錯誤/功能齊全的新事件:

$.ajax({ 
    url: 'something.html', 
    success: function(data) { 
    //add new elements with data. 
    //bind new events to elements 
    } 
}); 
+0

我在AJAX完成後綁定表單提交操作,它工作。 謝謝! – Nathan 2010-05-15 15:37:15

+0

很高興能幫到你! – 2010-05-16 23:56:14

1

使用事件代表團(livedelegate)。生活可能是最適合這種情況:

$(".stockbuyform").live("submit", function() { 
    alert("Need to validate purchasing details"); 
}); 

什麼活做的是(從manual):

附加一個處理程序事件當前 選擇匹配所有 元素,現在或將來。

因此,您不必擔心ajax替換的元素會丟失綁定的事件處理程序。另外,確保從提交處理程序返回false,以防止發生非XHR GET/POST。