jQuery(附加,分离,重新附加)事件处理程序问题

时间:2017-11-10 09:35:22

标签: javascript jquery html datatables

我尝试做的是制作数据表可编辑。所以特征流就是这个。

  1. 点击单元格时,输入将为已创建。因此,无论单元格具有什么,它都将被覆盖并移动到创建的输入的值。 (请参阅DataTables编辑器的示例,它的工作原理如下。)

  2. 输入的模糊。 (按 Enter 键也会触发模糊

    一个。如果该值未更改,它将返回到正常单元格(当然其值不变)

    湾如果值已更改,它将作为输入保留。

  3. 所以,如果我对一个单元格进行编辑,它应该在模糊时作为输入保留,但是如果我再次对该单元格进行编辑,这次输入原始值, UPON BLUR ,它应该 NOW 收缩回​​一个单元格。

    但有些奇怪的事情正在发生。这就是流程。

    1. 我单击一个单元格,编辑,使其失去焦点。 (所以它将留作输入)

    2. 我点击另一个单元格,编辑,让它失去焦点。 (它也将作为输入)

    3. 现在,当我点击我首先编辑的单元格并将其保留回原始值时。 UPON BLUR ,我第二次编辑的单元格也会返回到单元格中!

    4. 我怀疑这里有范围/参考问题。

      随意在JSFiddle中查看我的工作代码,以便更多地了解问题。

      JSFiddle:http://jsfiddle.net/UvjnT/2512/

      对于JSFiddle,尝试这些(在第一行):

      1. 单击带有三叉戟值的单元格。

      2. 编辑它,就像添加一个字母一样。喜欢:aTrident

      3. 现在失去焦点,它将作为输入。

      4. 尝试点击具有互联网价值的单元格。

      5. 编辑它,对我来说是:aInternet

      6. 失去焦点。它仍将作为输入。

      7. 现在单击具有常规值的单元格。

      8. 将其编辑回三叉戟。

      9. 查看错误发生。

      10. 要证明您的功能正常运行,而且只是一个错误。

        尝试编辑单元格,失去焦点,再次将其编辑为原始值,然后将其缩小回单元格。 :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');
          }
        });
        

1 个答案:

答案 0 :(得分:2)

似乎问题就在这里:

input.fadeOut('fast', function() {
      el.html(val);
      toInput(el, val); // <- this
    });

更正:您已忘记在var添加newVal = $(this).val();。 这导致变量newVal被全局定义。

Corrected JSFiddle