2016-10-24 2 views
1

Я только что узнал, как использовать метод .on(), и я использую его для добавления обработчика событий к некоторым кнопкам, которые добавляются «вживую» (после готовности DOM).jQuery при запуске события щелчка несколько раз

$('#table').on("click", ".delete", function() { 
    //whatever 
}); 

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

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

JS

$('#dataSelector').change(function() { 
    #more code 
    $('#table').on("click", ".delete", function() { 
     var data_name = $("#dataSelector option:selected").attr('name'); 
     alert(data_name); 
    }); 
    }); 

HTML

<div id="selectData"> 
    <label>Select:</label> 
    <br> 
    <div class=""> 

     <select id="dataSelector" class="form-control"> 

      <option id="default" selected="true" name="default">Pick</option> 

      <option value="1" name="somethingA">somethingA</option> 

      <option value="2" name="somethingB">somethingB</option> 

      <option value="3" name="somethingC">somethingC</option> 

     </select> 


    </div> 
</div> 

<div id="goal_table" class="col-md-12"> 

    <table id="table" class="table table-bordered"> 
     <tbody> 
      <tr> 
       <th>Name1</th> 
       <th>Name2</th> 
       <th>Name3</th> 
       <th>name4</th> 
       <th></th> 
      </tr> 
      <tr id="13"> 
       <td>somethingA</td> 
       <td>value</td> 
       <td>whatever</td> 
       <td>∞</td> 
       <td> 
        <button name="13" type="button" class="btn btn-default delete"><i class="fa fa-trash" aria-hidden="true"></i> 
        </button> 
       </td> 
      </tr> 
     </tbody> 
    </table> 

</div> 
+0

Я не вижу такой вещи в консоли. Пробовал ловить и печатать ваше событие в консоли. Проверьте эту скрипту своего кода: https: //jsfiddle.net/Lrdntz07/ .. –

+0

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

ответ

3

просто добавить от() до включения(), чтобы удалить существующее событие на нем

есть вероятность того, что вы уже привязывать событие в этом элементе, поэтому, если вы хотите переподключить событие, которое вы просто отключили («событие»), чтобы избежать fir многократного события

$('#table').off("click").on("click", ".delete", function() { 
    var data_name = $("#dataSelector option:selected").attr('name'); 
    alert(data_name); 
}); 
+0

Как я хочу узнать, не могли бы вы объяснить, почему? Заранее спасибо. –

+0

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

+0

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

0

Я проверил ваш код, для меня его работала нормально. может быть в коде, вы указываете тот же идентификатор для кнопки выбора и удаления. проверьте и дайте уникальное имя каждому из ваших объектов.

+0

или использовать ... $ ('. Delete'). On ("click", function() { var data_name = $ ("# dataSelector option: selected"). Attr ('name'); alert (data_name); }); –

+0

некоторые кнопки создаются динамически, поэтому метод не будет работать. –

+0

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

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