所以我在一个CRUD界面中有一个巨大的表格。跨度中的每个链接都调用jQuery UI对话框表单,该表单从另一个页面获取其内容。当发生的操作(在这种情况下,创建)完成时,它会将生成的新数据附加到表中并强制执行该表。这一切都发生在JS和DOM中。
问题在于,新表行的CRUD链接实际上并不触发创建对话框表单,因为跨度中的所有原始链接仅在document.ready上扫描,因为我没有重新加载页面,无法看到新的链接。
代码如下:
$(document).ready(function() {
var $loading = $('<img src="/images/loading.gif" alt="Loading">');
$('span a').each(function() {
var $dialog = $('<div></div>')
.append($loading.clone());
var $link = $(this).one('click', function() {
// Dialog Stuff
success: function(data) {
$('#studies tbody').append(
'<tr>' +
'<td><span><a href="./?action=update&study=' + data.study_id + '" title="Update Study">Update</a></span></td>' +
'</tr>'
);
fdTableSort.init(#studies); // This re-sorts the table.
$(this).dialog('close');
}
$link.click(function() {
$dialog.dialog('open');
return false;
});
return false;
});
});
});
基本上,我的问题是,是否有任何方法可以触发jQuery重新评估页面链接而不强迫我进行浏览器页面刷新?
答案 0 :(得分:0)
如果我理解正确,我认为您可以稍微更改代码以使其适用于您:
$(document).ready(function() {
var $loading = $('<img src="/images/loading.gif" alt="Loading">');
$('span a').click(function() { //changed here
var $dialog = $('<div></div>')
.append($loading.clone());
//rest of your code
}
}
因此,通过这种方式,您的对话框将完全动态创建,并在跨越元素的click事件上附加到DOM。
问题的另一点是,如果对话框是浮动div(很可能),页面刷新可能会导致在提供页面后对话框不显示。所以你不想要,也买不起页面刷新。
答案 1 :(得分:0)
尝试通过jquery live函数绑定新创建的链接。