2016-12-06 54 views
0

我遇到了一個問題,如果在我的jQuery數據表中繞過每行時值相等,然後添加一個類,然後單擊該元素。但我不能讓類添加該元素,所以我可以再點擊元素。Jquery datatable:其中值是等於點擊最接近的複選框

<table id="userTable" class="display" width="100%"> 
    <thead> 
    <tr> 
     <th>Enable/Disable</th> 
     <th>Number</th> 
     <th>Name</th> 
    </tr> 
    </thead> 
    <tbody> 
    </tbody> 
</table> 

jQuery(function($) { 
    var extension = "1000"; 

    data = [ 
    ['User_488', 'User 1', 'disable'], 
    ['User_487', 'User 2', 'disable'], 
    ['User_477', 'User 3', 'disable'], 
    ['User_490', 'User 4', 'disable'], 
    ['1000', 'User 5', 'disable'], 
    ['1001', 'User 6', 'enable'], 
    ['1002', 'User 7', 'enable'], 
    ['1004', 'User 8', 'enable'] 
    ] 

    var t = $('#userTable').DataTable({ 
    "data": data, 
    'columns': [{ 
     "render": function(data, type, row, meta) { 
     var checkbox = $("<input/>", { 
      "type": "checkbox" 
     }); 
     if (row[2] === "enable") { 
      checkbox.attr("checked", "checked"); 
      checkbox.addClass("checkbox_checked"); 
     } else { 
      checkbox.removeAttr("checked"); 
      checkbox.addClass("checkbox_unchecked"); 
     } 
     return checkbox.prop("outerHTML") 
     } 
    }, { 
     "render": function(data, type, row, meta) { 
     return row[0]; 
     } 
    }, { 
     "render": function(data, type, row, meta) { 
     return row[1]; 
     } 
    }], 
    order: [] 
    }); 
    t.rows().every(function(rowIdx, tableLoop, rowLoop) { 
    var data = this.data(); 
    var number = (t.cell(rowIdx, 0).data()); 
    if (number === extension) { 
     console.log("[SUCCESS]: Found: " + extension); 
     $(this).closest("[type=checkbox]").find('.checkbox_unchecked').addClass('clickmepls'); 
     var ev = document.createEvent("MouseEvents"); 
     ev.initEvent("click", true, true); 
     document.querySelector(".clickmepls").dispatchEvent(ev); 
     return false; 
    } 
    }); 

}); 

但我不能讓類添加到元素,並保持爲調度元素返回null。

這裏是JSFiddle

+0

你能描述你的問題清楚? –

+1

下面的答案可能會起作用,但是您使用的'this'不是DOM,'this'是您從'.every()'得到的對象,您可以將下一行移動到'.every'塊的上方並且它將工作:'$(this).find('[type = checkbox] .checkbox_unchecked')。addClass('clickmepls');' –

回答

1

你可以嘗試改變這種代碼

 

    t.rows().every(function(rowIdx, tableLoop, rowLoop) { 
     var data = this.data(); 
     var number = (t.cell(rowIdx, 0).data()); 
     if (number === extension) { 
      console.log("[SUCCESS]: Found: " + extension); 
      $(this).closest("[type=checkbox]").find('.checkbox_unchecked').addClass('clickmepls'); 
      var ev = document.createEvent("MouseEvents"); 
      ev.initEvent("click", true, true); 
      document.querySelector(".clickmepls").dispatchEvent(ev); 
      return false; 
     } 
     }); 

這個

 

    t.rows().every(function(rowIdx, tableLoop, rowLoop) { 
     var data = this.data(); 
     var number = (t.cell(rowIdx, 0).data()); 
     if (number === extension) { 
      nth = rowIdx + 1; 
      $('#userTable tbody tr:nth-child('+nth+')').find("input[type=checkbox]").trigger('click'); 
      return false; 
     } 
     }); 

以下是完整的javascript代碼

jQuery(function($) { 
    var extension = "1000"; 

    data = [ 
    ['User_488', 'User 1', 'disable'], 
    ['User_487', 'User 2', 'disable'], 
    ['User_477', 'User 3', 'disable'], 
    ['User_490', 'User 4', 'disable'], 
    ['1000', 'User 5', 'disable'], 
    ['1001', 'User 6', 'enable'], 
    ['1002', 'User 7', 'enable'], 
    ['1004', 'User 8', 'enable'] 
    ] 

    var t = $('#userTable').DataTable({ 
    "data": data, 
    'columns': [{ 
     "render": function(data, type, row, meta) { 
     var checkbox = $("<input/>", { 
      "type": "checkbox" 
     }); 
     if (row[2] === "enable") { 
      checkbox.attr("checked", "checked"); 
      checkbox.addClass("checkbox_checked"); 
     } else { 
      checkbox.removeAttr("checked"); 
      checkbox.addClass("checkbox_unchecked"); 
     } 
     return checkbox.prop("outerHTML") 
     } 
    }, { 
     "render": function(data, type, row, meta) { 
     return row[0]; 
     } 
    }, { 
     "render": function(data, type, row, meta) { 
     return row[1]; 
     } 
    }], 
    order: [] 
    }); 
    t.rows().every(function(rowIdx, tableLoop, rowLoop) { 
    var data = this.data(); 
    var number = (t.cell(rowIdx, 0).data()); 
    if (number === extension) { 
     nth = rowIdx + 1; 
     $('#userTable tbody tr:nth-child('+nth+')').find("input[type=checkbox]").trigger('click'); 
     return false; 
    } 
    }); 

}); 
+0

很好用,你可以簡單描述答案中發生了什麼,所以我可以理解關於你所做的改變,它會好一點,我知道你正在找到這個孩子,但是'nnth = rowIdx + 1;'爲什麼不能'rowIdx'不工作?我假設實際需要的孩子也將是'rowIdx + 1'。對不起,如果我指出顯然只是確保我理解它。 – Studento919

+1

因此,當你在't.rows()中循環時,你實際上循環數據而不是行。 和'rowIdx'(索引從0開始)是數據行的索引。 我只是選擇'nth'錶行使用簡單的CSS選擇器'nth-child'(索引從1開始)。然後將點擊事件應用於觸發器內部的複選框 – Kebeng