我有一个数据表,在按钮单击时,某些值将保存到数据库,而其他值则被检索。我需要这个过程是连续的,但我只能让它第一次工作。
起初我使用.ajax()
和.replaceWith()
来重写整个表,但因为这会覆盖DOM,所以它会丢失与表关联的事件。我无法使用.live()
,因为我正在使用stopPropagation()
而.live()
由于事件冒泡而不支持它。我能够基本上将click事件重新绑定到.ajax()
回调中的表上,但第二次调用按钮点击事件没有做任何事情。
我将代码更改为使用.get()
用于ajax,.html()
将结果放在表中(服务器端代码现在返回完整的表,而不是<table>
标记) 。我不再需要将click事件重新绑定到表中,但后续单击该按钮仍然无效。
最后,我将其更改为.load()
,但结果相同(非)。
通过“什么都不做”我的意思是当ajax调用按预期返回新的HTML时,它不会应用于表。我确定它与更改DOM有关,但我想我只是覆盖了表内容而不是表对象本身,它应该可以工作。显然我错过了一些东西;它是什么?
修改
HTML:
<table id="table1" class="mytable">
<tr>
<td><span id="item1" class="myitem"></span></td>
<td><span id="item2" class="myitem"></span></td>
</tr>
</table>
<input id="Button1" type="button" value="Submit" />
jQuery的:
$( "Button1" ).click( function() {
$( "table1" ).load(
"data.aspx",
function( data ) {
//...
}
);
} );
答案 0 :(得分:3)
使用.replaceWith方法只是第一次工作,但使用.html方法一直都很好。 JQuery的:
$.ajax ({
type: "GET",
url: '/MyUrl/Id',
data: "{}",
cache: false,
dataType: "html",
success: function(data) {
$('#divContainer').html(data);
}
})
答案 1 :(得分:2)
我盯着这看了两天半,这让我确信我在用jQuery做错了,但是通过反复试验和大量警报声明,我终于发现ajax每次都返回相同的结果。将服务器端脚本设置为不缓存(Response.Expires = 0
)解决了问题。
(而且,FWIW,我还在使用.load()
语句。)
答案 2 :(得分:1)
您需要在加载新内容后重新绑定事件处理程序。
答案 3 :(得分:1)
如果您使用1.4.2 .delegate()
可能有用吗?