Jquery .on(“click”,..不对使用document.getElementById(elemid)注入的内容进行绑定.innerHTML = xmlhttp.responseText;

时间:2014-05-03 08:31:05

标签: jquery onclick

我希望有人可以帮助我... 我正在尝试使用加载了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。我在这里缺少什么?

1 个答案:

答案 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>