我希望有人可以帮助我... 我正在尝试使用加载了jax的内容实现登录页面。
我有一个jquery函数,在其中执行php脚本并将输出加载到正文中的<div>
之一。对于与整个页面一起加载的初始登录表单,&#34; login&#34;按钮工作正常,授权内容被注入所需的<div>
。
然而,这个&#34;授权内容&#34;我还注入了我试图绑定到jquery的其他链接和/或按钮,例如:
<div class="logout_bar">
<form class="logout">
<button type="submit" id="logout_button">Logout</button>
</form>
</div>
<script type='text/javascript'>
$(function () {
$('#logout_button').on('click', function (e) {
e.preventDefault();
alert("OK");
SubmitJQueryData('main_body','process_logout.php','');
});
});
</script>
不幸的是,这个处理程序从来没有因某些原因而无法理解。当我刷新页面,导致整个页面重新加载 - 然后一切正常。
这个脚本被添加到按钮后的页面中,所以我不希望DOM的问题没有看到id。我在这里缺少什么?
答案 0 :(得分:1)
通过分配innerHTML
属性插入HTML时,不会执行script
标记。 (Example 1 [来源] - 我们没有看到alert
。)
当您使用jQuery时,只需使用其html
函数,将执行脚本。 (Example 2 [来源] - 我们确实看到alert
。)
,而不是
document.getElementById(elemid).innerHTML=xmlhttp.responseText;
做的:
$("#" + elemid).html(xmlhttp.responseText);
旁注:
当您使用jQuery时,您不必直接使用XMLHttpRequest
对象。 jQuery有一些非常方便的包装器。其中之一是load
function,它使用ajax检索内容并将其加载到目标元素中,执行响应中的任何脚本(除非您使用片段标识符)。
例如:
$("selector for the target element").load("/path/to/content");
...将从/path/to/content
检索内容并将其插入到selector for the target element
匹配的元素中,并执行脚本。
example 1的来源,我们看不到alert
:
<div id="foo"></div>
<script>
document.getElementById("foo").innerHTML =
"Setting <code>innerHTML</code> doesn't execute scripts." +
"<script>alert('foo');</scr" + "ipt>";
</script>
example 2的来源,我们做,请参阅alert
:
<div id="foo"></div>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
$("#foo").html(
"Using jQuery's <code>html()</code> does execute scripts." +
"<script>alert('foo');</scr" + "ipt>"
);
</script>