我有一个 .on(click) 第一次完美工作,但第二次失败了,就像我在下面描述的那样。这是代码:
$('.inline-edit').on('click', function() {
if (!$(this).find(':input').length) {
var current_val = $(this).find('span').html();
$(this).html('<input type="text" class="txt" maxlength="27" value="' + current_val + '"/>');
//On outside click, cancel
$(this).unbind('clickoutside').bind('clickoutside', function(event) {
cancelEdit($(this), current_val);
})
}
});
单击具有类 inline-edit 的时<td>
,将获取内部跨度中的值,并启用输入。这样,用户可以进行内联编辑。当用户点击外部时<td>
,取消编辑,调用cancelEdit(),即:
function cancelEdit(element, value) {
$(element).html('<span>' + value + '</span><img id="pencil_edit" src="/images/pencil_edit.png">');
}
cancelEdit 函数将其返回<td>
到其原始形式,即:
<td class="inline-edit">
<span>abcdpqsdfsdfsdfrstuvwxyz<?php echo $i?></span>
<img id="pencil_edit" src="/images/pencil_edit.png"/>
</td>
问题是,在调用 cancelEdit 之后,现在当用户单击 时<td>
,如果他们单击<span>
部分(文本),则该.on('click')
功能无法正常工作,因为<span>
正在获取元素,而不是<td>
. 然而,这只会发生第二次,即使 html 与第一次完全相同。为什么会这样?