2012-01-25 45 views
0

好,我知道的標題聽起來錯過領先,但我承擔......事件與jQuery的方法上必然觸發一次

我有下面的代碼,我重用了幾個節點的意圖使用構造簡單的是/否對話:

var myDialog = function(e) { 
    if(myDialog.dialog === undefined){ 
     var container = $('<div><h2>Are you sure you want to delete this Item?</h2></div>'), 
      yesBtn = $('<input type="button" value="Yes" id="yesBtn"/>').appendTo(div), 
      noBtn = $('<input type="button" value="No" id="noBtn"/>').appendTo(div); 

     myDialog.dialog = container; 
     $('#yesBtn').on({ click: function(e) { console.log('Yes'); } }); 
     $('#noBtn').live('click', function(e) { console.log('No'); }); 
    } 

    //I am using a third party lib called facebox to create the showbox 
    $.facebox(myDialog.dialog); 
}; 

然後該功能是用來通過一個按鈕,當按下時,顯示對話框(正確地每次),並且當點擊第一次時,是/否按鈕會正確觸發,但當對話框再次顯示時,兩個事件都不會觸發。如果我使用現場 insted的的

,這個問題變得固定我一直在讀的很好的做法是開始使用後者,而不是前者。

任何意見將有很大的幫助!

在此先感謝。

+0

可能你沒有使用1.7 jquery(即使用舊版本)。只是爲了排除可能性 – tmjam

+0

對不起,我沒有在開始時指出它,但我使用jQuery 1.7;) – Hugo

回答

0

我不認爲它的工作原理,當你在()

,而不是

$('#yesBtn').on({ click: function(e) { console.log('Yes'); } }); 

發送選項哈希嘗試

$('#yesBtn').on("click", function(e) { console.log('Yes'); } ); 
0

這取決於你使用jQuery的版本。檢查你的jQuery版本是什麼。至於jQuery 1.7,你應該使用on使用live已被棄用。如果您使用1.4,則不能使用on

$(selector).live(events, data, handler);    // jQuery 1.3+ 
$(document).delegate(selector, events, data, handler); // jQuery 1.4.3+ 
$(document).on(events, selector, data, handler);  // jQuery 1.7+ 

而且您也在使用on錯誤的方法。

  1. 您傳遞了錯誤的參數。
  2. 您只能在on上的第三個參數中傳入對象。你把它作爲對象數據傳入。
  3. 使用上,你把一個監聽器,然後等待,直到該事件冒泡從您選擇的DOM元素聽衆的手段,因此,這是在做正確的方式:

    的$(document)。在(「click」,「#yesBtn」,function(e){console.log(「Yes」);});

在這種情況下,它泡到document。您可能想要使事件冒泡到只有#yesBtn的容器。你可以把#yesBtn換成div或者其他東西