keydown и събития за промяна не работят за таблици с данни на jquery

Имам поле за въвеждане във всеки ред на моята таблица с данни на jquery. Трябва да задействам събитие при промяна на текста и да натисна Enter за всяко от тези полета за въвеждане. Зареждам таблица с данни на jquery, използвайки обработка от страна на сървъра. Преди без да използвам обработката от страна на сървъра, събитията в полето за въвеждане работеха добре!. Какво кара събитието да мълчи сега?

Събития, които използвах преди ---

$('#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>
    }
  }

Обработка от страна на сървъра и поле за въвеждане, прилагани в движение-

$('#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.....'
        }

    });

person Murali Uppangala    schedule 04.09.2014    source източник
comment
Имате няколко елемента с един и същ ID txtQty, нали? Ако е така, заменете $('#txtQty').keydown с, например, $('.inputs').keydown   -  person Regent    schedule 04.09.2014
comment
@Regent опита, не работи!!   -  person Murali Uppangala    schedule 04.09.2014
comment
Поради динамично създадените елементи използвайте $(document).on('keydown', '.inputs', function(e) вместо това.   -  person Regent    schedule 04.09.2014
comment
@Regent, моля, добавете коментар по-горе като отговор, позволете ми да кажа, че това е правилният отговор.   -  person Murali Uppangala    schedule 04.09.2014


Отговори (2)


  • имате няколко елемента с един и същ идентификатор txtQty. За правилно обработване на събития на множество елементи можете да използвате class. Например клас inputs.

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

И така, накрая трябва да изглежда така:

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

$(document).on('change', '.inputs', function() {
    alert("Change");
}
person Regent    schedule 04.09.2014

Предполагам, че има повече от един "txtQty" на страница, така че вместо идентификатор използвайте клас

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


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

$('.txtQty').change(function () {
     alert("Change");
}
person Maximilien    schedule 04.09.2014
comment
не се изисква лична карта? защо два класа? клас=въвежда txtQty - person Murali Uppangala; 04.09.2014
comment
това работи при обработка от страна на клиента само за datatble в този случай!! - person Murali Uppangala; 04.09.2014