Вставка кнопок в таблицы данных Не работают

Я пытаюсь вставить кнопки в JQuery DataTables, но кажется, что при нажатии кнопки ничего не происходит.

Код выглядит следующим образом (для JQuery Datatable):

            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").click(function() {
            alert(this.name);

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

Любая проницательность?

Ответ 1

Если вы назначаете обработчик с $(".approveButton").click(...), он будет применяться только к уже существующим элементам, которые в данный момент соответствуют селектору ".approveButton". То есть, элементы, созданные позже, автоматически не получат собственных обработчиков. Я предполагаю, что это проблема - если не вы можете игнорировать следующее...

К счастью, существует механизм создания обработчика, который будет автоматически работать с соответствующими элементами, которые создаются в будущем:

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

Обратите внимание, что начальный селектор document - это будет работать, но вы должны установить его на родительском элементе ближе к вашим кнопкам, если возможно, так что, возможно, следующее:

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

(Я не уверен, что "#пример" является наиболее подходящим родителем для этой цели, но вы не показываете какой-либо ваш HTML-код, поэтому...)

Посмотрите jQuery doco для .on() для получения дополнительной информации.

Или, если вы используете версию jQuery старше 1.7, вы можете использовать `.delegate() '

Ответ 2

Если вы используете jquery < 1.7 вы должны использовать delegate() или live()

    $(".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