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

Javascript jQuery(附加、分离、重新附加)事件处理程序问题,javascript,jquery,html,datatables,Javascript,Jquery,Html,Datatables,我试图做的是使Datatable可编辑。所以特征流是这样的 单击单元格时,将创建一个输入。因此,无论单元格有什么,它都将被覆盖并移动到创建的输入的值。(请参见DataTables Editor的示例,其工作原理如下。) 输入的模糊时。(按Enter键也会触发模糊) a。如果该值不变,它将返回正常单元格(当然其值不变) b。如果该值已更改,它将保留为输入 因此,如果我对一个单元格进行编辑,它应该在模糊时保留为输入,但如果我再次对该单元格进行编辑,这一次是为了输入原始值,在模糊时,它应该现在缩回到一

我试图做的是使Datatable可编辑。所以特征流是这样的

  • 单击单元格时,将创建一个输入。因此,无论单元格有什么,它都将被覆盖并移动到创建的输入的值。(请参见DataTables Editor的示例,其工作原理如下。)

  • 输入的模糊时。(按Enter键也会触发模糊)

    a。如果该值不变,它将返回正常单元格(当然其值不变)

    b。如果该值已更改,它将保留为输入

  • 因此,如果我对一个单元格进行编辑,它应该在模糊时保留为输入,但如果我再次对该单元格进行编辑,这一次是为了输入原始值,在模糊时,它应该现在缩回到一个单元格中

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

  • 我点击一个单元格,编辑,使其失去焦点。(因此它将作为一个输入)

  • 我单击另一个单元格,编辑,使其失去焦点。(它也将保留为输入)

  • 现在,当我单击首先编辑的单元格并将其保留回其原始值时在模糊时,我第二次编辑的单元格也会返回到单元格中

  • 我怀疑这里有一个范围/参考问题

    请随意在JSFIDLE中查看我的工作代码,以便更好地理解问题

    JSFiddle:

    对于JSFIDLE,尝试执行以下操作(在第一行):

  • 单击具有三叉戟值的单元格

  • 编辑它,就像添加字母一样。比如:阿蒂登特

  • 现在失去焦点,它将继续作为输入

  • 尝试单击具有Internet值的单元格

  • 编辑它,对我来说是:安特妮

  • 失去焦点。它将继续作为输入

  • 现在,单击具有A值的单元格

  • 编辑回三叉戟

  • 看到错误发生了吗

  • 来证明你的功能是有效的,只是有一个bug

    尝试编辑一个单元格,失去焦点,再次将其编辑为其原始值,然后看着它缩回到单元格中:D

    帮助将是伟大的!:)

    我在表中单击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');
      }
    });
    
    el.html(“”);
    el.off(‘咔嗒’);
    input=el.children('input').first();
    input.focus();
    输入.on('keyup',功能(e){
    如果(e.which==13){
    $(this.blur();
    }
    });
    输入。on('blur',函数(e){
    newVal=$(this.val();
    if(val==newVal){
    css('font-weight','normal');
    input.parent('td').css('outline','none');
    输入关闭(“模糊键控”);
    input.fadeOut('fast',function(){
    html(val);
    toInput(el,val);
    });
    }否则{
    input.parent('td').css('outline','1px solid#F79421');
    }
    });
    
    问题似乎就在这里:

    input.fadeOut('fast', function() {
          el.html(val);
          toInput(el, val); // <- this
        });
    
    input.fadeOut('fast',function(){
    html(val);
    
    输入(el,val);//你能给我解释一下发生了什么事吗?:(找到了)^检查答案