我很好奇的以下情形的影响:执行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