html()并单击处理程序
html() and click handler
我最初得到了这段代码,一切都很好:
<div class="rm">
<button id="sub" type="submit">
<span>Registo</span>
</button>
</div>
<script type="text/javascript">
$(document).ready(function() {
$(".rm>#sub").click(function(event) {
event.preventDefault();
var formdata = $("#custom").serialize();
$.ajax({
url: "dojo/insert.php",
type: "post",
dataType: "json",
data: formdata,
success: function(data) {
switch (data.livre) {
case 'error':
$(".rm").html('<button id="sub" type="submit"><span>Rever</span></button>');
break;
default:
$('#paginas').delay(50).load('profile_empresa_3.php');
break;
}
}
});
return false;
});
});
</script>
现在的问题。当我用一个id相同的按钮添加$(".rm").html("")
时,如果我点击这个新按钮,页面将被重新加载。我的问题是,如果添加的按钮有相同的id,为什么点击处理程序不重复?
感谢
在将事件处理程序绑定到$(".rm > #sub")
时,新元素还不存在,因此jQuery无法将处理程序绑定到此元素。
您可以重新绑定事件处理程序,也可以将其绑定到$('.rm')
并使用事件委派(使用.on()
):
$('.rm').on('click', '#sub', function() { // or use button instead of #sub
//...
});
但是,与其替换整个元素,不如更改其文本内容:
$('#sub span').text('Rever');
// or
$('.rm button span').text('Rever');
还要注意,ID应该是唯一的,在DOM中有两个具有相同ID的元素是无效的。
一个id在一个页面上应该是唯一的。
要为所有新的动态创建的按钮添加相同的操作,您需要执行以下操作:
$(".rm > .sub").live("click",function(event) {
....
但是,在不使用相同id的情况下,请使用一个类,就像我上面所说的那样。
click
函数将遍历DOM,并将事件绑定到该时间点存在的所有元素。稍后将创建一个新的DOM元素,该元素不会被绑定。
要使其按您想要的方式工作,请参阅live()函数的jQuery文档。
由此产生的变化看起来像:
$('#sub').live('click', function(event) {
//your implementation
});
之所以会发生这种情况,是因为无论id如何,事件都绑定在唯一的DOM对象中,当您删除初始按钮并替换为具有相同id的按钮时,绑定到按钮的事件就会消失。
你可以做的是在一个变量中声明事件函数,当你重新制作按钮时,再次将事件分配给它
你的代码是:
var btnEvent = function(e) {
e.preventDefault();
var formdata = $("#custom").serialize();
$.ajax({
url: "dojo/insert.php",
type: "post",
dataType: "json",
data: formdata,
success: function(data) {
switch (data.livre) {
case 'error': {
$(".rm").html('<button id="sub" type="submit" onclick="return btnEvent(event)"><span>Rever</span></button>');
} break;
default:
$('#paginas').delay(50).load('profile_empresa_3.php');
break;
}
}
});
return false;
};
$(document).ready(function() {
$(".rm>#sub").click(btnEvent);
});
使用jQuery的.on()
而不是.click()
-http://api.jquery.com/on/
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- Adobe Edge:动画完成时添加onComplete处理程序
- 是否可以从输入处理程序中确定输入的类型
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 平均值.on(事件[,选择器][,数据],处理程序)
- getSript在同一对象上多次添加处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何让React JS点击处理程序在执行时更新DOM
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- Backbone listenTo不将jquery函数作为处理程序进行激发
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数