каждый цикл терпит неудачу в плагине jquery? - PullRequest
2 голосов
/ 27 января 2012

Может кто-нибудь объяснить мне, что здесь происходит?

У меня есть этот HTML-код:

   <div class="calculadora">

      <div class="clear campos">
       <label>Amount</label>
       <input class="fi" id="amount" type="text" name="amount" value=""/>
      </div>

      <div class="clear campos">
       <label>Down Payment</label>
       <input class="fi" id="downPay" type="text" name="downPay" value=""/>
      </div>

      <div class="clear campos">
       <label>Years</label>
       <input class="fi" id="years" type="text" name="years" value=""/>
      </div>

      <div class="clear campos">
       <label>Rate</label>
       <input class="fi" id="rate" type="text" name="rate" value=""/>
      </div>

      <input id="cal" type="button" value="cacular"/>
      <div class="result"></div>
          </div>

И я делаю плагин JQuery, но мне нужно получить все атрибуты('значение') каждого входа, и я делаю это следующим образом:

this.each(function(){

        var obj = $(this),
        vacio = parseFloat( $('.fi', obj).attr('value'));

       // some code...

Но что происходит, что только получить первое значение первого входа ... почему ??

НО !!если я сделаю так:

var s = $('.fi', obj).each(function(){
             alert ($(this).attr('value'))
            });

это работает !!!Зачем??это хорошо ???

Заранее спасибо, если кто-нибудь сможет мне объяснить.

1 Ответ

1 голос
/ 27 января 2012

.attr () возвращает значение указанного атрибута из первого вызванного элемента в коллекции.

Из документа:

Получите значение атрибута для первого элемента в наборе подходящих элементов.

Когда вы сделаете его другим способом , вы извлекаетеЗначение атрибута data для каждого элемента в соответствующем наборе.

Один из способов добиться того, что вам нужно, можно сделать с помощью функции .map () , которая возвращает массив jquery:

var vals = $('.fi', obj).map(function(){
    return this.value;
});

Чтобы преобразовать его в чистый массив javascript, вы используете vals.toArray();

Примечание: нет необходимости в jquery для получения значения ввода, потому что this в обработчиках событий ив итерации по элементам текущий элемент DOME, поэтому вы можете просто сделать this.value.

...