2014-09-04 3 views
1

У меня есть поле ввода в каждой строке моего jquery datatable. Я должен вызвать событие при изменении текста и ввести прессу для каждого из этих полей ввода. Загрузка jquery datatable с использованием обработки с помощью сервера. Прежде чем без использования обработки на стороне сервера события поля ввода работали нормально !, что заставляет событие молчать Теперь?«keydown» и «change» события не работают для данных jquery datatables

События я использовал до ---

$('#txtQty').keydown(function (e) { 
     alert("keydown"); 
} 

$('#txtQty').change(function() { 
     alert("Change"); 

} 

же слушатели я использовать после обработки на стороне сервера прикладной.

Jquery сетка детали- клиентской обработки на сторону и добавление окна ввода ~

@foreach (var item in Model) 
{ 
<tr> 
        . 
. 
. 
. 
. 
. 
@if (item.Qty <= 0) 
{ 
<td> 
    <input class="inputs" id="txtQty" type="text" [email protected] /> 
    </td> 
    } 
    } 

Serverside обработка и поле ввода наносится на Перейти-

$('#grid').dataTable({ 
     "bServerSide": true, 
     "sAjaxSource": "../myaction/AjaxHandler", 
     "bProcessing": true, 
     "scrollY": 385, 
     "scrollX": true, 
     "scrollCollapse": true, 
     "jQueryUI": true, 
     "bJQueryUI": true, 
     "sDom": 'lfrtip', 

     "aoColumns": [ 
         { "sName": "dfgdfg" }, 
         { "sName": "dfgdfg" }, 
         { "sName": "hhh" }, 
         { 
          "sName": "Qty", 

          "mRender": function (sName) { 

           return '<input class="inputs" id="txtQty" type="text" value='+ sName +' />'; 
          }, 
         }, 
         { "sName": "Category" }, 
         { "sName": "Comment" } 
     ], 
     "oLanguage": { 

      "sProcessing":'Processing.....' 
     } 

    }); 
+0

У вас есть несколько элементов с таким же ID 'txtQty', не так ли? Если это так, замените '$ ('# txtQty'). Keydown' с, например,' $ ('. Input'). Keydown' – Regent

+0

@Regent попробовал, он не работал! – flute

+1

Из-за динамически созданных элементов используйте '$ (document) .on ('keydown', '.inputs', function (e)' вместо этого. – Regent

ответ

1
  • у вас есть несколько элементов с одинаковым идентификатором txtQty. Для правильной обработки событий несколькими элементами вы можете использовать класс. Например, класс inputs.

  • для динамически созданных элементов вы можете использовать $(document).on("event", "selector", function() {});.

Итак, в конце концов, он должен выглядеть следующим образом:

$(document).on('keydown', '.inputs', function(e) { 
    alert("keydown"); 
} 

$(document).on('change', '.inputs', function() { 
    alert("Change"); 
} 
1

Я предположу, что имеется более одного «txtQty «на странице, поэтому вместо идентификатора используйте класс

<input class="inputs txtQty" type="text" [email protected] /> 


$('.txtQty').keydown(function (e) { 
    alert("keydown"); 
} 

$('.txtQty').change(function() { 
    alert("Change"); 
} 
+0

no id требуется? почему два класса? class = "Входы txtQty" – flute

+0

это работает на стороне клиента обработки только для данных в этом случае! – flute

Смежные вопросы