Второе появление флажка

#javascript #jquery

#javascript #jquery

Вопрос:

Как получить второе вхождение флажка? Вот что я пробовал:

 <div id="form">
    <label for="first">First</label>
    <input type="checkbox" name="first" value="1" >
    <br />
    <label for="second">Second</label>
    <input type="checkbox" name="second" value="2" >
    <br />
</div>

$('#form').find('input[type=checkbox]').eq(1)
  

Но у меня это не работает.

Комментарии:

1. Работает для меня

2. Работает в моем Chrome с jquery 1.7. Можете ли вы дать более подробное объяснение ошибки? (Также я бы просто использовал $('#form input[type="checkbox"]:eq(1)') или $('#form :checkbox:eq(1)') )

3. Если вы правильно установите флажки, вы могли бы быть более конкретными с $("#form :checkbox[name='second']") .

4. Возможно, вы скоро запустите свой код, взгляните на .ready

Ответ №1:

Ваш селектор неверен:

 $('#form').find('input[type=checkbox]').eq(1)
  

должно быть:

 $('#form').find('input[type="checkbox"]').eq(1)
  

Вы можете сделать это также подобным образом (доказательство в этом jsfiddle):

 jQuery('#form :checkbox[name="second"]:eq(1)');
  

(обратите внимание на использование :checkbox селектора, включение eq(1) в селектор и объединение селекторов — селектора формы, .find() вызова и .eq() call)

Комментарии:

1. @John: Возможно, это работает для вас, но вам действительно следует взглянуть на документацию по селекторам jQuery на тему » атрибут равен » , особенно на эту часть о значении атрибута: кавычки обязательны

2. @Tadeck Вот как это должно быть сделано, я согласен, но начиная с 1.5, это работает в любом случае.

Ответ №2:

 var foo = function(){
  var inputs = document.getElementById('form').getElementsByTagName('input');
  for(var i=0; i<inputs.length;i  ){
    var checkbox = inputs[i];
    if(checkbox.type == 'checkbox' amp;amp; checkbox.name == 'second'){
      return checkbox;
    }
  }
};
  

В чистом JS вы могли бы сделать что-то вроде этого 🙂

Комментарии:

1. Это выглядит как перебор по сравнению с jQuery('#form :checkbox[name="second"]:eq(1)') 😉

2. для меня это выглядит излишеством, каждый раз, когда я вижу сайты, включающие полную библиотеку jquery и использующие около 1% того, на что способен jquery 😉

3. Я бы предпочел видеть такие случаи вместо плохо написанного необработанного JavaScript на основе глобальных переменных, написанного способом, не подходящим для JavaScript. Благодаря jQuery становится меньше места для демонстрации некомпетентности, взлома сайтов, разозления пользователей и т.д. Кстати. Мне нравится ваш код — он лучше, чем большинство JS-кодов на SO, но я все еще думаю, что это излишество (особенно если OP уже использует jQuery для других задач, я думаю). В любом случае я даю 1 за хороший и правильный код.

Ответ №3:

Я думаю, вам следует изменить имя второго флажка

Ответ №4:

Дайте каждому флажку идентификатор и сделайте что-то вроде

 var $checkBox = $("#checkboxid");
  

Ответ №5:

Ваш код выглядит правильным для меня, вы также могли бы сделать:

 $('#form input:checkbox:last')
  

возни здесьhttp://jsfiddle.net/ephWb /

Ответ №6:

$(‘#form’).find(‘input[type=флажок]’).eq(1) выбирает элемент. Вы должны что-то сделать после этого. В примере:

 $('#form').find('input[type=checkbox]').eq(1).val('5'); //Changes the value to 5
$('#form').find('input[type=checkbox]').eq(1).hide(); //hides it