我尝试做的是制作数据表可编辑。所以特征流就是这个。
点击单元格时,输入将为已创建。因此,无论单元格具有什么,它都将被覆盖并移动到创建的输入的值。 (请参阅DataTables编辑器的示例,它的工作原理如下。)
输入的模糊。 (按 Enter 键也会触发模糊)
一个。如果该值未更改,它将返回到正常单元格(当然其值不变)
湾如果值已更改,它将作为输入保留。
所以,如果我对一个单元格进行编辑,它应该在模糊时作为输入保留,但是如果我再次对该单元格进行编辑,这次输入原始值, UPON BLUR ,它应该 NOW 收缩回一个单元格。
但有些奇怪的事情正在发生。这就是流程。
我单击一个单元格,编辑,使其失去焦点。 (所以它将留作输入)
我点击另一个单元格,编辑,让它失去焦点。 (它也将作为输入)
现在,当我点击我首先编辑的单元格并将其保留回原始值时。 UPON BLUR ,我第二次编辑的单元格也会返回到单元格中!
我怀疑这里有范围/参考问题。
随意在JSFiddle中查看我的工作代码,以便更多地了解问题。
JSFiddle:http://jsfiddle.net/UvjnT/2512/
对于JSFiddle,尝试这些(在第一行):
单击带有三叉戟值的单元格。
编辑它,就像添加一个字母一样。喜欢:aTrident
现在失去焦点,它将作为输入。
尝试点击具有互联网价值的单元格。
编辑它,对我来说是:aInternet
失去焦点。它仍将作为输入。
现在单击具有常规值的单元格。
将其编辑回三叉戟。
查看错误发生。
要证明您的功能正常运行,而且只是一个错误。
尝试编辑单元格,失去焦点,再次将其编辑为原始值,然后将其缩小回单元格。 :d
帮助就是greaaaaaaat! :)
我在表格中 td 元素的 上的每个 上运行以下代码。
el.html('<input class="table-edit form-control input-sm" type="text" value="' + val + '" />');
el.off('click');
input = el.children('input').first();
input.focus();
input.on('keyup', function(e) {
if (e.which == 13) {
$(this).blur();
}
});
input.on('blur', function(e) {
newVal = $(this).val();
if (val == newVal) {
input.css('font-weight', 'normal');
input.parent('td').css('outline', 'none');
input.off('blur keyup');
input.fadeOut('fast', function() {
el.html(val);
toInput(el, val);
});
} else {
input.parent('td').css('outline', '1px solid #F79421');
}
});
答案 0 :(得分:2)
似乎问题就在这里:
input.fadeOut('fast', function() {
el.html(val);
toInput(el, val); // <- this
});
更正:您已忘记在var
添加newVal = $(this).val();
。
这导致变量newVal
被全局定义。