2012-07-20 61 views
0
$(function(){ 

$(".mailbutton").click(function() { 
    var email = $(".mailingfield").val(); 
    $.post("/PHP_scripts/mailinglist.php", { email: email }, function(data) { 
     var content = $(data).find("#mailinglistform"); 
     $("#box").empty().append(content); 
    }); 
}); 
}); 

我用這個來處理的電子郵件地址。如果它在PHP腳本中失敗,表單會以'.mailinglistform'的形式發回,並附有一個新的表單和一些解釋錯誤的文本。我遇到的問題是,即使按鈕在回調窗體中具有'.mailbutton'類,該按鈕也不會對點擊進行任何操作。jQuery表單處理,我如何重新分配回調函數?

這是因爲jQuery只能第一次識別它?如果是這樣,有沒有辦法在回調中「重新加載」'mailbutton'.click函數?

謝謝!

回答

2

你是正確的,因爲你只能重新渲染頁面的一部分,以前的jQuery的你寫不與你重新呈現「新」 mailbutton類註冊。爲了解決這個問題,你應該使用.on(),如:

$(".wrapper").on('click', '.mailbutton', function() { 
    var email = $(".mailingfield").val(); 
    $.post("/PHP_scripts/mailinglist.php", { email: email }, function(data) { 
     var content = $(data).find("#mailinglistform"); 
     $("#box").empty().append(content); 
    }); 
}); 

在這種情況下,包裝需要一個類元素的重新渲染的部分之外(例如「內容」類,也許一類各地你的表單等),以及不斷呈現的(即不在ajax調用中重新呈現的)。這會將一個onclick處理程序附加到作爲包裝類的子類的任何.mailbutton類,無論它們在頁面呈現時是否存在,或者稍後將其添加到DOM。

+0

$( 「包裝」)。在( '點擊', '.mailingfield',()的函數 你的意思 $( 「包裝」)。在( '點擊', '.mailbutton',函數() 其中mailbutton是類的元素,我想點擊的功能添加到 – 2012-07-20 16:25:26

+0

是的,對不起 - 固定的那是委派的事件,即在屬於包裝類將觸發功能的兒童mailbutton類的所有點擊 – ernie 2012-07-20 16:26:04

+0

。。。這真是太棒了謝謝,也是一個很好的解釋。 – 2012-07-20 16:33:43

0

爲此,您可以使用AJAX和JQuery。或者你可以使用用戶load()

$(".mailbutton").click(function() { 
     $.ajax({          
       url: 'api.php', // Put your calling page path here 
       data: "", 
       dataType: 'json', 
       success: function(data) 
       { 
       //do whatever you want to do on success 
       } 
     }); 
    }); 
1

使用on綁定點擊事件。當控件在回調函數中再次呈現時,其事件將被刪除。使用on而不是click可以自動重新綁定事件。

$(function(){ 

    $(".mailbutton").on("click", function() { 
    var email = $(".mailingfield").val(); 
    $.post("/PHP_scripts/mailinglist.php", { email: email }, function(data) { 
     var content = $(data).find("#mailinglistform"); 
     $("#box").empty().append(content);   
    }); 
    }); 
}); 
+0

這似乎已經沒有效果, – 2012-07-20 15:56:45

+0

你期待此按鈕#mailinglistform的點擊? – Adil 2012-07-20 15:57:51

+0

on()的特定用法將失敗,因爲根據文檔 「事件處理程序僅與當前選定的元素綁定;它們在您的代碼調用.on()時必須存在於頁面上。有關更多詳細信息,請參閱Direct和委託事件 - 在@joe coleman的情況下,他需要使用委派的事件。 – ernie 2012-07-20 16:05:00