背景:我的网站上有一些值可以通过JavaScript和Ajax编辑。 Ajax工作正常,我可以编辑值,但在保存值后,我无法再次编辑它而不重新加载页面。
我将问题简化为:原始元素被HTML表单替换。提交表单时,表单本身将替换为新版本的display元素,但事件监听器已损坏。
我把一些示例JS代码(JSfiddle)放在一起,这些代码无法正常工作。
var text = $('<em/>').text('click me!');
text.click(function() {
var button = $('<input type="button" value="Click me, too" />');
button.click(function() {
$('#container').html(text);
});
$('#container').html(button);
})
$('#container').html(text);
会发生什么:
click
后的文本替换为表单(为简单起见保存文本元素)click
文本后click
在步骤2中再次起作用(现在不起作用)为什么再次使用click
对象时text
事件会丢失?
答案 0 :(得分:2)
使其工作而不是重写整个结构的一个选择是使用绑定事件克隆元素:
text.click(function() {
...
button.click(function() {
$('#container').html(text.clone(true));
});
...
})
$('#container').html(text.clone(true));
答案 1 :(得分:0)
.html()
method(重新)将innerHTML
属性设置为文本值。这些字符串没有事件监听器 - 我认为这是jQuery中的一个错误,.html()
接受的不是strings (and functions);在这里你的jQuery对象似乎甚至是字符串化的。