2015-06-07 14 views
3

我想綁定一個函數動態創建的元素,將不同的變量傳遞給它的數組中的每個組。但下面的代碼僅將函數綁定到最終數組項:JQuery上每個只綁定功能最終項目

<div id="pbody">My dogs chase cats for canine fun.</div> 
<script> 
function picturekeywords() { 
    $(wops).each(function(index) { 
     var $this = this; 
     var keyword = this.keywords.split(','); 
     $(keyword).each(function() { 
      var rex = new RegExp('((\\w|\\b|\'|\"|‘|’|「|」)*' + this + '(\\w|\\b|\'|\"|‘|’|「|」)*)', 'gi'); 
      $('#pbody').html($('#pbody').html().replace(rex, '<span class="wop">$1</span>')); 
     }); 
     $('.wop').on('mouseenter', {wopobj:$this}, wop); 
     $('.wop').attr('class', 'woptrig'); 
    }); 
    $('.woptrig .woptrig').each(function() { 
     $(this).after($(this).html()); 
     $(this).remove(); 
    }); 
} 
picturekeywords(); 

function wop(event) { 
    var wopobj = event.data.wopobj; 
    console.log(wopobj.picture); 
} 

var wops = [{keywords:'dog,canine', picture:'dog.jpg'}, {keywords:'cat,feline', picture:'cat.jpg'}]; 
</script> 

期望的結果應該記錄關鍵字懸停的img名稱。但它只適用於最後一次。

http://jsbin.com/doyoxu/1/edit?html,css,js,console,output

我認爲它看起來像一個封閉的問題,但不能工作了。有任何想法嗎?

+0

不是問題,但那些''標記是可怕的錯位? – adeneo

+2

您正在將事件處理程序附加到所有'.wop'元素,以便最終的事件處理程序處於頂層,將處理程序附加到特定的'.wop'元素,而不是一次使用'.wop'選擇器全部使用 –

+0

我認爲每次新的迭代只會影響正確的元素時,通過改變類?在任何情況下,爲$('。wop')。()添加.each()會得到相同的結果(請參閱bin)。 –

回答

0

尤里卡!替換函數每次都改變整個文本,而不僅僅是匹配。所以我將循環分成兩部分,最後綁定所有函數。排序。 :)