2012-03-08 7 views
1

Итак, у меня есть форма, которая здесь построена наполовину.Почему метод .next() не работает здесь, jQuery?

У меня есть 10 строк, я не хочу, чтобы следующая строка была доступна до тех пор, пока в текущей строке не появится что-то.

Here is the Fiddle

JS:

$(document).ready(function(e){ 
    var openLines = $('.lineToText'); 
    if (openLines.length){ 
     //$('textarea').css('display', 'none'); 
     openLines.each(function(index, element){ 
      if (index>0) { 
       $(this).prop('disabled', true); 
       } 
      }); 
     $('.lineToText').on('keyup', this, function(){ 
      if (this.value.length){ 
       $(this).next('.lineToText').prop('disabled', false); //<== thought this would do the job but it's not 
       } else { 
        $(this).prop('disabled', true); 
        } 
      }); 
     } 
    }); 

HTML:

<TABLE SUMMARY="layout table" CELLPADDING="1" CELLSPACING="0" BORDER="0"> 

<TR> 

<TD VALIGN="TOP"><INPUT ID="Q1_96" ONCLICK="ExclusiveChoiceClick('Q1:96');" ONKEYPRESS="return true;" TABINDEX="100" TYPE="CHECKBOX" NAME="Q1:96" VALUE="96" ></TD><TD CLASS="CHOICES" VALIGN="TOP" >1: <INPUT class="lineToText" type="text" size="50"><br> 

2: <INPUT class="lineToText" type="text" size="50"><br> 

3: <INPUT class="lineToText" type="text" size="50"><br> 

4: <INPUT class="lineToText" type="text" size="50"><br> 

5: <INPUT class="lineToText" type="text" size="50"><br> 

6: <INPUT class="lineToText" type="text" size="50"><br> 

7: <INPUT class="lineToText" type="text" size="50"><br> 

8: <INPUT class="lineToText" type="text" size="50"><br> 

9: <INPUT class="lineToText" type="text" size="50"><br> 

10: <INPUT class="lineToText" type="text" size="50"><BR><TEXTAREA ID="Q1_96_O" TABINDEX="101" COLS="25" ROWS="5" CLASS="OPENENDEDANSWER" NAME="Q1:O"></TEXTAREA></TD> 

</TR> 

<TR> 

<TD VALIGN="TOP"><INPUT ID="Q1_99" ONCLICK="ExclusiveChoiceClick('Q1:99');" ONKEYPRESS="return true;" TABINDEX="102" TYPE="CHECKBOX" NAME="Q1:99" VALUE="99" ></TD><TD CLASS="CHOICES" VALIGN="TOP">Don't Know</TD> 

</TR> 

</TABLE> 

Мысль $ (это) .next ('lineToText') было бы целесообразно, чтобы выбрать следующий пункт, но не может, может кто-нибудь сказать мне, что мне не хватает?

ответ

3

От jQuery Docs:

Описание: Получить сразу после родственный каждого элемента в наборе соответствующих элементов. Если предусмотрен селектор, он получает следующий брат, только если он соответствует этому селектору.

Вместо этого использовать nextAll(".lineToText:first").

Fiddle here

Причина ваш подход не работает из-за <br /> элементов, которые находятся между вашими <input /> элементами.

+0

То умный, спасибо, я буду принимать, как только это позволяет мне ... –

0

Кроме того, попробуйте следующее:

if (this.value.length > 0) { 
    $(this).siblings('.lineToText').first().removeAttr('disabled'); 
} 
+0

ответ выше работал, this.value.length возвращает номер, нет, если есть я ничего не получу 0 (false), и если есть что-то, я получу положительное число (true) –

Смежные вопросы