JQuery - каждая функция не работает - PullRequest
12 голосов
/ 21 декабря 2010

РЕДАКТИРОВАТЬ: это работает, но не уверен, почему?

  $('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 ]

20 голосов
/ 21 декабря 2010

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

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

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

$(function(){
    $("button[id^='button-'").click(function() {
        alert($(this).attr("value"));
    });
});
7 голосов
/ 21 декабря 2010

Вам не хватает );, и убедитесь, что ваш код находится в обработчике 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());
  });
});
1 голос
/ 06 июля 2015

Вы пропали без вести ):

$('button').each(function(){
            $(this).click(function(){
                alert($(this).val());
            });
        });
0 голосов
/ 21 декабря 2010

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

Попробуйте

$("button").click(function(){
    alert($(this).attr("value"));
});
0 голосов
/ 21 декабря 2010

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

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

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

...