Входное значение не определено внутри вложенного цикла - jquery - PullRequest
0 голосов
/ 15 октября 2010

Я пытался решить это некоторое время.Я пытаюсь получить значение ввода формы, которая находится во вложенном цикле.Но его наступление не определено.Есть идеи, почему так?Большое спасибо за вашу помощь заранее.Вот код для примера.

Я получаю значение $(#fund-no-"+f).attr('value') без проблем.Его $("#year-" + year_amt + "-" + f).attr('value'), что я не могу получить.Это не определено.Если я использую $("#year-" + year_amt + "-" + f).val() вместо этого, я вообще не получаю никакого значения.

 var fund_datastring;
 fund_datastring = "";
 if(fundqty >0)
 { 
  for(var f =1; f <= fundqty; f++)
  {
   fund_datastring += "&fund_no_" + f + "=" + $("#fund-no-" + f).attr('value') ;  

     var fundyear_datastring = "";
     var hidden_fundid = $("#hidden-fund-id-"+f).attr('value');

   var year_amt=2;
   //for(var year_amt =2; year_amt < hidden_fundid; year_amt++)
   while (year_amt < hidden_fundid)
   {
    fundyear_datastring += "&hidden_fund_"+f+ "=" + hidden_fundid + "&fund_"+ f +"_amount_"+ year_amt + "=" + $("#year-" + year_amt + "-" + f).attr('value') + "&fund_"+ f +"_year_"+ year_amt + "=" + year_amt;

   year_amt++
   }
   hidden_fundid = "";


  }


 }


<div class="fsFieldHorizontal"> 
    <input type="text" value="" class="fsField" size="32" name="year_1_1" id="year-1-1"> 
    <input type="hidden" value="4" id="hidden-fund-id-1"> 
        <a onclick="addFundForm(this); return false;" id="add-year-1" href="#"> 
            <img alt="Add Year" src="images/add_16.png"> 
        </a><br><br> 
        <div id="year-container-1"> 
            <div id="year-2-1" style="margin: 5px 0px;">
                <input type="text" value="" class="fsField" size="32" name="year_2_1" id="year-2-1">
                    <a onclick="removeFundYear("#year-2-1"); return false;" href="#">
                        <img alt="Remove Year 2" src="images/cancel_16.png">
                    </a><br>
                    <label for="year-2-1" class="fsSupporting">Year 2 Amount</label>
            </div>
            <div id="year-3-1" style="margin: 5px 0px;">
                <input type="text" value="" class="fsField" size="32" name="year_3_1" id="year-3-1">
                    <a onclick="removeFundYear("#year-3-1"); return false;" href="#">
                        <img alt="Remove Year 3" src="images/cancel_16.png">
                    </a><br>
                    <label for="year-3-1" class="fsSupporting">Year 3 Amount</label>
            </div>
        </div> 
</div>

1 Ответ

4 голосов
/ 15 октября 2010

Обновление 2

Как я и подозревал ниже, ваши идентификаторы не были уникальными: у вас есть оба:

<div id="year-2-1" style="margin: 5px 0px;">

А это:

<input type="text" value="" class="fsField" size="32" name="year_2_1" id="year-2-1">

jQuery, вероятно, находит первый, который (конечно) не имеет value.

Обновление 1

Из того, что вы описываете, наиболее вероятный сценарий состоит в том, что у вас нет элемента с идентификатором year-2-1 (на первом проходе) и т. Д. & Mdash; или у вас есть более одного такого элемента (который является недопустимым и поэтому непредсказуемым). Потому что, по сути, если DOM прав, он работает: http://jsbin.com/icume3 И если нет элемента с таким идентификатором, вы получите именно то, что описываете: http://jsbin.com/icume3/2

Старый, по-видимому, неправильный ответ (во многих отношениях) :

Вы не показали свою разметку, но я думаю, что .val() работает там, где .attr("value") не потому, что вы имеете дело с элементом формы, у которого нет * Атрибут 1034 *, как select (см. Ниже) . .val получает значение элемента, которое зависит от типа элемента.

Редактировать : Очевидно, jQuery обрабатывает «значение» в attr, по крайней мере, для select с, по крайней мере, в браузерах, которые я пробовал (включая IE6, поэтому): http://jsbin.com/oxega3 Так не то.

...