Veena Hosur Ответов: 1

Почему нажатие кнопки срабатывает более одного раза в jquery


ПРИВЕТ,
у меня есть html-таблица с кнопкой редактирования строки.когда я нажимаю на кнопку, она вызывает функцию morw более одного раза. например, если я нажимаю 2-ю строку, она дважды вызывает функцию.

вот мой код:

if (rowCnt === 0) {

                               $("#tblDetails tbody").append(
                                   "<tr>" + "<td id='Items" + rowCnt + "'>" + prty + "</td>" +
                                   "<td id='dstr'>"+ districtname + "</td>" +
                                   "<td id='nmindar'>" + industrialarea + "</td>" +
                                    "<td id='plno'>"+ newStr + "</td>"+
                                   "<td><img src='images/edit.jpg' class='btnEdit'><img src='images/delete.png' class='btnDelete'/></td>" +
                                   "</tr>");

                           }
                           else {

                               var dupCount = 0;
                               for (var i = 0; i < rowCnt; i++) {
                                   var num = $("#Items" + i).html().toString();
                                   if (id == num) {
                                       dupCount++;
                                   }
                               }
                               if (dupCount === 0) {

                                   $("#tblDetails tbody").append(
                                  "<tr>" + "<td id='Items" + rowCnt + "'>" + prty + "</td>" +
                                  "<td id='dstr'>" + districtname + "</td>" +
                                  "<td id='nmindar'>" + industrialarea + "</td>" +
                                   "<td id='plno'>" + newStr + "</td>" +
                                  "<td><img src='images/edit.jpg' class='btnEdit'><img src='images/delete.png' class='btnDelete'/></td>" +
                                  "</tr>");


                               }

                           }

                           $(".btnEdit").bind("click", edit_rows);
                           $(".btnDelete").bind("click", Delete);

                       }
                       $('#Plotinfo').jqxGrid('clearselection');
                   }
                   else {
                       alert("Please select plots")
                   }
               });

               // return the new pager element.
               return element;
           }

           //edit row in table
           function edit_rows() {
               var address = [];
               $(this).closest('tr').find('td').not(':last').each(function () {
                   var textval = $(this).text(); // this will be the text of each <td>
                   address.push(textval);
               });
               alert(address[0]);
               alert(address[1]);
               alert(address[2]);
               alert(address[3]);

           };


           //delete row in table
           function Delete() {
               var par = $(this).parent().parent(); //tr
               par.remove();
           };


если я нажимаю на 1-ю строку, я получаю предупреждение 3 раза.если я нажимаю на 2-ю строку, я получаю предупреждение дважды.и если я нажимаю на 3-ю строку, я получаю предупреждение один раз.
может ли кто-нибудь сказать мне, почему я становлюсь таким

Что я уже пробовал:

//var par = $(this).parent().parent(); //tr
              var tdprty = par.children("td:nth-child(1)");
              var tddstr = par.children("td:nth-child(2)");
              var tdindname = par.children("td:nth-child(3)");
             var tdplno = par.children("td:nth-child(4)");
              alert(tddstr.html());
              alert(tdindname.html());
              alert(tdplno.html());

Peter Leow

Как диагностировать, если вы показываете только фрагмент кода? Нажмите кнопку "улучшенный вопрос", если вам действительно нужна помощь.

pjaar89

Как вы связываете событие click? Вы забыли поделиться с нами самой важной частью :)

Veena Hosur

$(".btnEdit").персонализация("клик", edit_rows);

функция edit_rows() {
адреса ВАР = [];
$(этот).ближайший('тр').найти('тд').не(':последний').каждый(функция () {
var textval = $(this). text (); / / это будет текст каждого
address. push(textval);
});
предупреждение (адрес[0]);
предупреждение (адрес[1]);
предупреждение (адрес[2]);
предупреждение (адрес[3]);

};

F-ES Sitecore

Вы должны использовать jsfiddle, чтобы предоставить рабочий пример, однако проблема, вероятно, связана с таким кодом

$(".btnEdit").персонализация("клик", edit_rows);

вы связываете событие щелчка для каждого элемента с этим классом каждый раз, когда вызываете этот код, поэтому, если он вызывается более одного раза, то все получает еще одно событие щелчка, поэтому, если он вызывается три раза при создании элементов в цикле, первый элемент с этим классом будет иметь три события щелчка, вторые два и последнее, потому что первый элемент получает дополнительный щелчок, даже когда вы вызываете код во второй раз, и третий, когда вы вызываете его в третий раз.

Veena Hosur

http://jsfiddle.net/x34fseh3/5/


если я даю предупреждение в кнопке удаления, то происходит то же самое

Veena Hosur

для каждой строки Я хочу кнопку, чтобы

1 Ответов

Рейтинг:
4

pjaar89

Вы уверены, что эта строка не вызывается дважды, не встроена в петлю или что-то в этом роде? Если вы дважды свяжете событие click, обработчик будет достигнут дважды...

$(".btnEdit").bind("click", edit_rows);


вы кричите потому что такой код работает:

<table>
    <tr>
        <td>test</td>
        <td><img src="#" class="btnEdit" /></td>
    </tr>
    <tr>
        <td>test</td>
        <td><img src="#" class="btnEdit" /></td>
    </tr>
</table>


$(".btnEdit").bind("click", edit_rows);
      
function edit_rows() {
    console.log("row clicked");
};


редактировать:

После прочтения вашей скрипки то, что происходит, является нормальным и объяснено выше

$("#btnInsert").click(function() {
    $("input[id^=btnDelete]").bind("click", function () { });
});


Каждый раз, когда вы нажимаете на btnInsert, вы связываете предыдущие входные данные с новым обработчиком событий.

Решение было бы

var strId = "btnDelete" + rowCnt;
$("input[id=" + strId + "]").bind("click", function () {
    $(this).parent().parent().remove();
});


[Скриншот обработчиков событий, сгенерированных x]


Veena Hosur

$(".btnEdit").bind("click", edit_rows); это привязка только один раз

pjaar89

Нет, это не так, смотрите правку моего решения

Veena Hosur

где здесь находится кнопка вставить

Veena Hosur

где здесь инертная кнопка

pjaar89

Просто прочтите, что F-ES Sitecode и я сказал.

В своей скрипке вы помещаете bind() внутрь btnInsert.click () дело в том, что вы нацеливаетесь на одни и те же элементы управления снова и снова... просто нацельтесь на вновь созданный элемент управления, как я написал в решении. Мы не можем сделать больше, чтобы помочь вам

Veena Hosur

не могли бы вы поделиться со скрипачом пожалуйста

pjaar89

http://jsfiddle.net/x34fseh3/65/

см. строку №32

Veena Hosur

его работа для кнопки удаления.Но мне нужна кнопка редактирования рядом с кнопкой удаления, чтобы она не работала.

pjaar89

http://jsfiddle.net/x34fseh3/66/

Если ты не согласишься, я больше не буду верить в человечество. Пожалуйста, примите ответ

Veena Hosur

извините и большое вам спасибо

Veena Hosur

как будет работать dis id будет отличаться na