为什么.next()方法在这里不起作用,jQuery?

时间:2012-03-08 15:39:52

标签: 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>

以为$(this).next('。lineToText')适合选择下一个项目但是没有,有人能告诉我我缺少什么吗?

2 个答案:

答案 0 :(得分:3)

来自jQuery Docs

描述:获取匹配元素集中每个元素的紧随其后的兄弟。如果提供了选择器,则仅当它与该选择器匹配时,它才会检索下一个兄弟。

改为使用nextAll(".lineToText:first")

小提琴here

您的方法不起作用的原因是因为<br />元素之间的<input />元素。

答案 1 :(得分:0)

另外,试试这个:

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