2015-04-15 147 views
0

這兩個代碼有什麼區別?

$(document).on('click', '.close_modal_window', function(){ 
     alert("window closed"); 
    }); 

$('.close_modal_window').on('click', function(){ 
     alert("window closed"); 
    }); 

我花了很長的時間來找出爲什麼我希望能夠關閉模式窗口。 當我使用第一個例子中顯示的代碼時,第二個代碼不工作,但我不明白爲什麼。

+0

你應該尋找*事件代表團*,谷歌現在是你的合作伙伴。 –

+0

當你的JS代碼被加載時,'.close_modal_window'元素是否存在? – itdoesntwork

+3

https://learn.jquery.com/events/event-delegation/ – undefined

回答

2

在您的第一個示例中,您將單擊事件放置到文檔中,而不是模態窗口本身。您的第一個代碼塊工作原因是因爲即使稍後動態添加元素,它也可以工作。如果您希望第二塊代碼也能正常工作,則需要確保在嘗試添加單擊事件之前已經完全加載了HTML。

退房.on() documentation

我想,這對我自己的方式是,你的代碼的第一個塊就是把點擊整個文檔事件。

  • 每次你點擊某處時,它會嘗試做一個匹配,其中點擊了其中的 元素。
  • 如果隨機點擊某處,它不會觸發功能,但如果您點擊.close_modal_window,它將在選擇器 上找到一個匹配,並啓動您在那裏的功能。

你的第二塊代碼做同樣的事情,但不同的。

  • 第二種方式更快,因爲您不會在整個頁面上單擊每個 然後進行匹配。
  • 它會將點擊功能直接綁定到.close_modal_window,並且只有在點擊它時纔會啓動 。
  • 但是,爲了這個工作,你必須已經在頁面上有 .close_modal_window的HTML,然後運行這段代碼。

而且如果您添加更多的類同名這種情況下,它不會,除非你再次運行的代碼,這部分工作,所以你必須要小心,如果你打算添加具有相同的類和更多的HTML元素有點擊工作

1

兩者之間的區別在於,代碼的第二個版本僅將click函數綁定到加載時位於頁面上的close_modal_window類的元素。即使代碼在頁面加載後動態顯示,代碼的第一個版本也會將click動作綁定到頁面上隨close_modal_window類出現的任何元素。

-1

first它的工作原理,如果你有,你寫這樣

<div id="divID">My div</div>

second它的工作原理,如果你做/創建動態HTML一樣
var myDiv ='<div id="divID">My div</div>'
和靜態HTML,那麼你追加它在一些像

$('#someid').append(myDiv)
第二種方法叫做event delegation

0

以上兩個例子與按鈕的單擊事件:

<button>click me</button> 

看的差異。


這裏是委託一個例子:

http://jsfiddle.net/xtz1np6d/

這裏一個無代表團:

http://jsfiddle.net/ketme18a/


正如你可以看到,元素dinamically創建,不在上下文中時該功能已創建,爲此,他們沒有任何功能分配。


我超級推薦這個演講:Understanding Event Delegation


但要謹慎,有一次,我用事件委託和它的iPad粉碎了我的niceScroll的插件。

相關問題