2016-08-15 105 views
1

我需要爲動態加載的元素創建on Click功能。此元素的ID位於變量$element中。該ID存儲一個字符串。我把它傳遞給.on事件處理程序是這樣的:jQuery .on事件不適用於變量選擇器

... .on("click", '"'+$element+'"', function() { ... 

它不工作,並給出了一個錯誤Uncaught Error: Syntax error, unrecognized expression: "#2"(見Case 1 JSFiddle)。 #2是元素的ID。

然後我嘗試它包裹在這樣的功能:

... .on("click", function() {'"'+$element+'"'}, function() { ... 

但它似乎把整個DOM成一個可點擊的元素(見Case 2 JSFiddle)。爲什麼...?

最後,Case 3 JSFiddle顯示我想要的行爲:如果用戶點擊與ID #2元素,有事,如果她點擊該元素具有ID #3或其他地方,沒有任何反應。當選擇器作爲變量傳遞時,我無法讓它工作。


Case 1 JSFiddle給出了一個奇怪的錯誤。

Case 2 JSFiddle單擊「a」或「b」,「a」將變成紅色。

Case 3 JSFiddle是我所追求的。點擊「a」,它變成紅色,點擊「b」沒有任何反應。

+1

你輸出''「#2」''作爲一個字符串,這是無效的。此外,ID不應以數字開頭。只需寫:'.on(「click」,$ element,function(){...'因爲'$ element'已經是一個字符串 – Alex

+0

https://jsfiddle.net/p4ursy9r/5/ – Alex

+0

@Alex https:/ /www.w3.org/TR/html5/dom.html#the-id-attribute它們可以 – epascarello

回答

1

從你的小提琴,have a look at this

var $element = '#a2'; 

$("#a1").on(
     "click", 
     $element,  // <-- child Selector 
     function() { 
      $("#a1") 
      .find('span') 
      .filter(function() { 
       return $(this).text() === 'a'; 
      }) 
      .css('background-color', 'red'); 
     } 
    ); 

請注意,IDS 應該不以數字開頭,at least in 4 times

+0

ID可以以數字開頭。https://www.w3.org/TR/html5/dom.html#the-id - 屬性 – epascarello

+0

@epascarello我沒有說什麼不同:)我更新了答案,雖然 – Alex

+0

我笑與facepalm。顯然只要把'$ element'放在那裏就行了。我的真實代碼中的ID以字母開頭,我只是在示例中簡化了它們。我想我應該像這裏一樣留下我的問題中的ID,這樣答案會帶來更多的信息。 –