2012-12-03 29 views
0

有誰知道爲什麼jQuery的事件不能與JSON數據解析通過Popcorn.js JSON解析器工作?JSON上的jQuery事件通過爆米花解析

我想在鏈接被點擊時調用一個函數。問題鏈接在json文件中。該文件似乎按預期進行了解析,爆米花腳註按預期顯示。我可以按照解析的鏈接,但沒有事件被激發。

這裏有一段代碼,我的工作:

<script> 
$(function() { 

    var popcorn = Popcorn("#video"); 
    popcorn.parseJSON ("data/data.json"); 

    $("a[href='gohere.html']").click(function() { 
      alert("clicked!"); //should display the message, but doesn't   
    }); 
}); 
</script> 

而且JSON文件看起來像這樣:

{ 
"data": [ 
    { 
     "footnote": { 
      "start":"1", 
      "end":"3", 
      "target":"footnote-container", 
      "text":"<a href='gohere.html'>Go Here</a>" 
     } 
    }, 
    { 
     "footnote": { 
      "start":4, 
      "end":7, 
      "target":"footnote-container", 
      "text":"Another piece of text." 
     } 
    } 
    ] 
} 

我真的很感激任何幫助!

回答

2

使用代表團.on()

$('body')on('click','a[href="gohere.html"]',function() { 
     alert("clicked!"); //should display the message, but doesn't   
}); 

與是靜態的,並在DOM準備的時間存在的最近的祖先更換'body'(不是必要的,但更有效)。這會將事件處理程序綁定到該元素 - 當它從給定的選擇器中冒出時,它會監聽事件。

+0

+1這比我的解決方案更好。 – wanovak

+0

是的,它運作得非常好,非常感謝! – stillenat

1

嘗試使用jQuery .on()內部的回調函數從parseJSON或其他ajax派生。

$("a[href='gohere.html']").on('click', function() { 
     alert("clicked!");   
}); 
+0

不,沒有任何改變。當我把鏈接放在html中時,我和你的方法都能正常工作。但它並不是通過JSON解析創建的。 – stillenat

+0

好的,問題是'parseJSON'是異步運行的,所以附加事件處理程序的代碼在DOM中通過解析JSON創建元素之前運行。你可以在'parseJSON'中做一個回調,並在其中放入'.on('click')...'代碼?那可行。 – wanovak