2012-04-20 70 views
0

我正在使用一個使用jquery創建手風琴的插件。然而,我的jquery函數在dom被操作之前運行,並且我在我的函數中定位的div id已經創建。這是我的功能。如何在div添加到dom後運行jquery函數?

jQuery('#_Offer_Something').click(function(){ 

     if(!confirm('Delete?')) { //show confirm dialog 
      return false; //do nothing if cancel is clicked (prevent the browser from following clicked link) 
     }else{ 
      window.location.replace("http://stackoverflow.com"); 
    } 
}); 

所以基本上這是行不通的,因爲div還不存在。

回答

4

編輯

在特定情況下可以使用:.on()

(function($){ // remap the '$' symbol to jQuery 

    $(document).on('click', '#_Offer_Something',function(){ 
    // ^^^^ or 'body' or a parent element 
     if(!confirm('Delete?')) { //show confirm dialog 
      return false; //do nothing if cancel is clicked (prevent the browser from following clicked link) 
     }else{ 
      window.location.replace("http://stackoverflow.com"); 
     } 
    }); 

})(jQuery); 

以上將作爲現在反對的jQuery .live()方法。
請確保您已將您的jQuery <script>標記放置在</body>標記之前。

+0

我是否在我的document.ready函數中使用這個函數,而不是或之外,因爲我在document.ready中有其他函數 – Nicola 2012-04-20 19:25:07

+1

@Nicola,使用'(function($){/ * ..code here .. */})(jQuery);'是常用的'$(document).ready(){'調用的一個非常實用的替代品,所以像它一樣使用它。 – 2012-04-20 20:07:49

+0

好的,謝謝,我使用wordpress,不能使用熟悉的$,而必須使用jQuery,而這個替換函數會讓我使用$? – Nicola 2012-04-20 20:10:24

0
$(document).ready(function(){ 
    ... code here ... 
}); 

$(function(){ 
    ... Code here ... 
}); 
1

使用jQuery on只有在插入元素後才能綁定或綁定元素。示例請參閱http://api.jquery.com/on/。簡單的例子:

$(document).on('click', '#_Offer_Something', function(){}); 
+0

似乎並不奏效。我的功能正在工作,因爲直接在chromes控制檯中使用它使其工作 – Nicola 2012-04-20 19:11:35

+0

我向你保證,這個工作。確保你有最新的jQuery版本。編輯:搞笑我,我其實犯了一個錯誤。 – Gajus 2012-04-20 19:12:48

+0

啊,是的,當我改變它的文件工作。所以,我在我的document.ready函數中使用這個函數,而不是或者之外,因爲我在document.ready中有其他函數。 – Nicola 2012-04-20 19:16:12

2

如果創建動態的某個頁面加載後您的DOM對象,那麼你將要使用委託事件處理,以便從它的活動將有所回升,即使安裝了事件處理程序之前的相關對象。你可以做到這一點與jQuery的1.7+使用.on()動態形式:

jQuery(document).on('click', '#_Offer_Something', function(){ 

     if(!confirm('Delete?')) { //show confirm dialog 
      return false; //do nothing if cancel is clicked (prevent the browser from following clicked link) 
     }else{ 
      window.location.replace("http://stackoverflow.com"); 
    } 
}); 

從技術上講,這種工作方式是,所有點擊事件冒泡祖先鏈(除非一些沿途的對象將停止起泡過程) 。在這種情況下,我們在document對象上安裝點擊處理程序,並監視與匹配#_Offer_Something選擇器的對象相關的點擊事件。

爲獲得最佳性能,您不會實際將此事件處理程序綁定到document對象。相反,您將選擇在安裝事件處理程序時存在的靜態父對象(某些父級爲#_Offer_Something)。我選擇document對象只是因爲你沒有透露你的HTML的其餘部分,所以我不知道什麼是更好的選擇。

+0

@Guy - 沒有其他答案使用我提出的相同代碼。您的答案使用靜態事件處理。我使用委託事件處理。如果在安裝事件處理程序時存在'#_Offer_Something'對象,則您的工作良好。即使在安裝事件處理程序一段時間後創建了該對象,Mine也將工作。我們的答案都使用'.on()',但是有根本不同的方法。 – jfriend00 2012-04-20 19:15:05

+0

感謝您的回答,它的工作。在我的document.ready函數中使用這個函數,而不是或者之外,因爲我在document.ready中有其他函數? – Nicola 2012-04-20 19:31:26

+1

@Nicola - 它應該放在'$(document).ready()'裏面。 – jfriend00 2012-04-20 19:39:44

相關問題