我很好奇的以下情形的影響:執行JavaScript的AJAX與jQuery
想我定義一個jQuery單擊事件,例如
$(function()
{
$('.someElement').click(function() { /*do something*/ };
};
其獲取一些隨意裝HTTP GET
請求。
但是這個.someElement
在請求時最初並不存在於DOM中。
現在,如果我也有一個異步AJAX調用其中插入一些片html
是確實有這個.someElement
定義,例如
$.ajax(
{
//options omitted for readability
success: function(responseData)
{
$('#elementToInsert').html(responseData);
}
});
裝載和插入<div class="someElement"></div>
到頁面中。
看起來,當點擊.someElement
元素時,jQuery click事件中的腳本被執行。
它以某種方式錯誤地告訴我,這工作。有人會解釋我爲什麼這有效嗎?
也可以設想在下一個場景:
正如前面的例子中,我請求相同的任意HTTP GET
。但是在這個請求中,點擊事件是而不是包括在內。包括雖然包括相同的ajax
調用是。
現在在responseData
的HTML看起來像這樣
<div class="someElement"></div>
<script>
$(function()
{
$('.someElement').click(function() { /*do something*/ };
};
</script>
當我點擊.someElement
,我得到了完全相同的行爲在第一個場景。這讓我更加害怕,所以有人也可以向我解釋爲什麼這會起作用?
一些注意事項:
- 是被插入到DOM的
responseData
,就有點以前 jQuery庫。 - 我不認爲它應該使用哪個服務器端框架,但在我的情況下,它將是ASP.NET MVC 5.
- 這些方案在最新版本的以下瀏覽器中進行測試:IE, Firefox,Chrome。
總結我的問題:上述方案如何工作(例如,jQuery被執行)?
附:有趣的是,在答案this question,它解釋說,
的JavaScript插入爲DOM文本將不會執行。
雖然在我的情況下它是執行。
它也指another question,它解釋了必須調用eval()
才能執行javascript。
另外this article解釋了我的情況的相反,並提到使用eval()
。
嘗試,而不是使用'click'這一點。 '('click',function(){/ * do something * /};' – pmahomme
@pmahomme你甚至讀過這個問題嗎? – Adjit