2011-11-25 57 views
11

我试图插入按钮到JQuery DataTable中,但似乎按下按钮时,什么也没有发生。将按钮插入DataTables单元格失败

如下(对于JQuery的数据表)中的代码:

  var oTable = $('#example').dataTable({ 
       "aaData": movieclips, 
       "bProcessing": true, 
       "bAutoWidth": false, 
       "fnInitComplete": function() { 
           var oSettings = this.fnSettings(); 
           for (var i=0 ; i<oSettings.aoPreSearchCols.length ; i++){ 
            if(oSettings.aoPreSearchCols[i].sSearch.length>0){ 
             $("tfoot input")[i].value = oSettings.aoPreSearchCols[i].sSearch; 
             $("tfoot input")[i].className = ""; 
            } 
           } 
          }, 
       "aoColumns": [ 
        { 
         "sTitle": "Title", 
         "sClass": "center", 
         "sWidth": "80%" 
        }, 
        { 
         "sTitle": "Video URL", 
         "sClass": "center", 
         "fnRender": function(obj) { 
          var sReturn = obj.aData[ obj.iDataColumn ]; 
          var returnButton = "<input class='approveButton' type='button' name='" + sReturn + "' value='Play'></input>"; 
          return returnButton; 
         }, 
         "sWidth": "20%" 
        } 
       ] 
      }); 

ApproveButton中的功能如下:

 $(".approveButton").click(function() { 
      alert(this.name); 

      try { 
       alert(this.name); 
      } finally { 
       return false; 
      } 
     } 

任何见解?

回答

8

如果您将处理程序分配给$(".approveButton").click(...),它将仅适用于那些与".approveButton"选择器匹配的已存在的元素。也就是说,稍后创建的元素不会自动获取自己的处理程序。我假定这就是问题所在 - 如果不是你可以忽略以下...

幸运的是创造一个处理程序,将匹配的是在未来创建的元素自动工作机制:

$(document).on("click", ".approveButton", function() { 
    // your function code here 
}); 

注意,最初的选择是document - 这会工作,但如果你能,你应该仔细将其设置一个父元素到您的按钮,所以也许以下几点:

$("#example").on("click", ".approveButton", function() { /* your code */ }); 

(我不知道“#example”是否是最合适的家长为此目的,但你不显示任何您的HTML,所以...)

看看the jQuery doco for .on()欲了解更多信息。

或者,如果您使用的是jQuery的版本比1.7更老,您可以使用`.delegate()'

+0

标记正确,因为信息非常全面。如果包括Nicola的live(),它将是完美的。 –

+0

谢谢。我没有提到['.live()'](http://api.jquery.com/live/),因为'.delegate()'是一个更好的选择,除非你仍然在版本<1.4.2上,但我猜1.4.2不到两年前,所以早期版本可能仍在使用中。哦,现在已经提到它了...... – nnnnnn

+0

+1,晴朗的一天清楚:D –

3

如果您使用jquery < 1.7,你应该使用delegate()或生活()

$(".approveButton").live('click', function() { 
     alert(this.name); 

     try { 
      alert(this.name); 
     } finally { 
      return false; 
     } 
    } 

    $("body").delegate(".approveButton", "click", function() { 
     alert(this.name); 

     try { 
      alert(this.name); 
     } finally { 
      return false; 
     } 
    } 

以其它方式使用on()由nnnnnn提供

+0

+1表示为jquery <1.7提供的live()。 –