jquery - каждая функция / click не работает

EDIT: это работает, но не уверен, почему?

  $('button').each(function() {
    $(this).bind(
        "click",
        function() {
            alert($(this).val());
        });
  });

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

мой HTML выглядит так:

<table id="addressbooktable">
<thead>
    <tr>
        <th>Name</th>
        <th>Action</th>
    </tr>
</thead>

<tbody>
    <tr>
        <td>7892870</td>
        <td><button id="button-20" class="custom-action" value="XY89" name="info">Click</button></td>
    </tr>

    <tr>
        <td>9382098</td>
        <td><button id="button-21" class="custom-action" value="XY544" name="info">Click</button></td>
    </tr>

    <tr>
        <td>3493900</td>
        <td><button id="button-22" class="custom-action" value="XY231" name="info">Click</button></td>
    </tr>
</tbody>
</table>

и код выглядит так:

  $('button').each(function() {
    $(this).click(function() {
      alert($(this).val());
    }
  });

но, нажав на него, ничего не делает на все? Я неправильно его использую?

5 ответов


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

$(function(){
    $("button").click(function() {
        alert($(this).attr("value"));
    });
});

но более точный селектор может быть:

$(function(){
    $("button[id^='button-'").click(function() {
        alert($(this).attr("value"));
    });
});

вы пропускаете );, и убедитесь, что ваш код находится в document.ready обработчик, как это:

$(function() {
  $('button').each(function() {
    $(this).click(function() {
      alert($(this).val());
    }); //missing ); here!
  });
});

таким образом, он не будет работать до тех пор, пока <button> элементы находятся в DOM для $('button'), чтобы найти их. Кроме того, вы можете запустить .click() на набор элементов, как это:

$(function() {
  $('button').click(function() {
      alert($(this).val());
  });
});

вам не хватает ):

$('button').each(function(){
            $(this).click(function(){
                alert($(this).val());
            });
        });

Юп. Попробуйте это:

$('button').click(function() {
      alert($(this).val());
  });

вы также можете захотеть return false или .preventDefault() там.


вы не можете использовать .val() метод для кнопки. Вы можете использовать .attr() чтобы получить атрибут value. Если вы используете пользовательские атрибуты, используйте data-attribute.

попробовать

$("button").click(function(){
    alert($(this).attr("value"));
});