【发布时间】:2012-01-09 02:12:37
【问题描述】:
我正在尝试使用 jQuery 和 ajax 为锦标赛制作一个可编辑的表格。
目前的表结构如下:
<table>
<tr id="result-243">
<td class="name">Somebody</td>
<td class="score_1">9.0</td>
<td class="score_2">7.0</td>
<td class="score_3">7.8</td>
<td class="score_4">9.9</td>
<td class="score_5">7.9</td>
<td class="edit-243"><div id="edit-243" class="edit">Edit</div></td>
</tr>
</table>
我想要的是在单击“编辑”链接时插入一个表单。此表单将填充当前条目中的值。我可以按如下方式进行这项工作:
$('.edit').click(function() {
result_id = $(this).attr('id').match(/[0-9]+/);
sel = '#result-' + result_id;
$.get(
myScript.ajax_url,
{
action:'getResults',
id:result_id,
nonce: myScript.nonce
},
function( response )
{
form = "<form id='save-" + result_id"' class='post-me'>";
for(value in response) {
form += "<input type='text' name = '" + value + "' value = '" + response[value] + "' />";
}
form += "<input type='submit' id='save-this' name='save' value='Save' /></form>";
$(sel).html(form);
}
);
});;
我显然希望能够将表单绑定到 $.post() 请求,并且应该发布数据。但是,我似乎遇到的问题如下:
如果我想用新值恢复以前的表格元素(如上),我不能再次点击“编辑”。我认为这是因为 jQuery 会将事件绑定到动态插入的 DOM 元素,但只会绑定一次。我不能在不丢失事件绑定的情况下删除元素。
对我的设计方法有什么问题有什么想法吗?
【问题讨论】:
-
与您的问题没有直接关系,但请不要将点击事件放在
<div>这样的元素上:<a>标签更好,因为它可以通过键盘访问(除非您不这样做)不关心不能或不使用鼠标的用户)。此外,您似乎将新创建的表单设置为<tr>元素的子元素 - 实际上<tr>元素应该只包含<td>(或<th>) 元素作为直接子元素,然后您的表单应该是<td>(因此,如果您希望表单替换所有当前行,您应该尝试类似<td colspan="6"><form>...</form></td>)。 -
关于锚点的观点......我打算将表单包装在一个 td 元素中。感谢您了解。