如何禁用焦点上的特定输入字段?

时间:2014-03-31 19:31:38

标签: javascript jquery

我有GridView呈现一张桌子。该表包含文本字段和输入字段。

我编写了以下jQuery来禁用焦点上的文本字段。它工作正常:

$(function(){

    $('input[type="text"]').live("focus", function() {
        var rowId = $(this).attr('id');
        var inputField = $(this).attr('name');
        alert(inputField.indexOf('txtSearchValue'));
        $('tr').each(function(){
            var inputId = $(this).find('input[type="text"]').attr('id');
            var submitId = $(this).closest("tr").find('input[type="submit"]').attr('id');
            if(inputId != null && typeof inputId !== "undefined"){
                if(rowId !== inputId){               
                    $(this).find('input[type="text"]').attr("disabled", "disabled");
                    $(this).closest("tr").find('input[type="submit"]').attr("disabled","disabled");
                }
            }
        });                                
    });
});

我还有另一个文本字段,它不是生成的表的一部分,但每次单击属于该表的文本字段时它也会被禁用。

这是一个文本字段:

<input id="ctl00_ContentMain_txtSearchValue" type="text" value="2222" name="ctl00$ContentMain$txtSearchValue"></input>

我试图使用:

var inputField = $(this).attr('name'); inputField.indexOf('txtSearchValue');

访问该额外字段,但我不确定如何将其与jQuery结合使用,以确保始终启用该字段。

有什么想法吗?

如何修改它,所以,额外的字段

这是我的html表:

<TABLE style="POSITION: absolute; BORDER-BOTTOM-COLOR: red; BORDER-TOP-COLOR: red; BORDER-COLLAPSE: collapse; BORDER-RIGHT-COLOR: red; BORDER-LEFT-COLOR: red; TOP: 150px" id=ctl00_ContentMain_grvIsoSearchResults class=DataWebControlStyle border=1 rules=all cellSpacing=0>
<TBODY>
<TR class=HeaderStyle>
<TH scope=col>ISONUM</TH>
<TH scope=col>OFFICE NAME</TH>
<TH scope=col>REGION</TH>
<TH scope=col>DIVISION</TH>
<TH scope=col>EMAIL ADDRESS</TH></TR>
<TR class=RowStyle>
    <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 70px; DISPLAY: inline-block"  id=ctl00_ContentMain_grvIsoSearchResults_ctl02_txtgvIsoNum>222222222 </SPAN>
    </TD>
     <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 200px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl02_txtgvIsoOfficeName>Test, Eugene Test </SPAN>
     </TD>
     <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 50px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl02_txtgvRegion>99</SPAN> 
     </TD>
      <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 50px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl02_txtgvDivision>11111</SPAN> 
      </TD>
      <TD><INPUT id=ctl00_ContentMain_grvIsoSearchResults_ctl02_txtgvEmailAddress class=textInput name=ctl00$ContentMain$grvIsoSearchResults$ctl02$txtgvEmailAddress value=test@test.com> 
          <INPUT id=ctl00_ContentMain_grvIsoSearchResults_ctl02_btnEmailUpdate onclick="return ValidateEmail(this);" name=ctl00$ContentMain$grvIsoSearchResults$ctl02$btnEmailUpdate value=Update type=submit> 
      </TD>
      </TR>
      <TR class=AlternatingRowStyle>
      <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 70px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl03_txtgvIsoNum>CB2222001 </SPAN>
      </TD>
       <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 200px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl03_txtgvIsoOfficeName>DENNIS PETROVIC </SPAN>
      </TD>
      <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 50px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl03_txtgvRegion></SPAN>
      </TD>
      <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 50px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl03_txtgvDivision>99801</SPAN> 
      </TD>
       <TD>
         <INPUT id=ctl00_ContentMain_grvIsoSearchResults_ctl03_txtgvEmailAddress class=textInput name=ctl00$ContentMain$grvIsoSearchResults$ctl03$txtgvEmailAddress value=dennis@dlgent.com> 
          <INPUT id=ctl00_ContentMain_grvIsoSearchResults_ctl03_btnEmailUpdate onclick="return ValidateEmail(this);" name=ctl00$ContentMain$grvIsoSearchResults$ctl03$btnEmailUpdate value=Update type=submit>
       </TD>
    </TR>
    <TR class=RowStyle>
        <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 70px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl04_txtgvIsoNum>FT2222001 </SPAN>
       </TD>
        <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 200px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl04_txtgvIsoOfficeName>DENNIS PETROVIC </SPAN>
       </TD>
        <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 50px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl04_txtgvRegion></SPAN>
        </TD>
        <TD><SPAN style="TEXT-ALIGN: center; WIDTH: 50px; DISPLAY: inline-block" id=ctl00_ContentMain_grvIsoSearchResults_ctl04_txtgvDivision>99801</SPAN> 
       </TD>
       <TD><INPUT id=ctl00_ContentMain_grvIsoSearchResults_ctl04_txtgvEmailAddress class=textInput name=ctl00$ContentMain$grvIsoSearchResults$ctl04$txtgvEmailAddress value=dennis@dlgent.com> 
       <INPUT id=ctl00_ContentMain_grvIsoSearchResults_ctl04_btnEmailUpdate onclick="return ValidateEmail(this);" name=ctl00$ContentMain$grvIsoSearchResults$ctl04$btnEmailUpdate value=Update type=submit> 
        </TD>
     </TR>
</TBODY>
</TABLE>

1 个答案:

答案 0 :(得分:0)

您将功能附加到所有'input[type="text"]'。这意味着页面上的所有输入字段都将具有此功能。您可能想查看this问题。

您的查询应如下所示:table > input[type="text"]For more details

<强>更新

查看您的代码我不确定您的系统是否满足您的需求。无论如何,这是一个filldle,它为您提供表中包含inputText个类的字段。然后你可以附加一个功能(只需弹出控制台 - 在Chrome F12中,你就会看到页面的选定元素)。

正如我所说,你需要按级别限制你的选择器级别:

$('td > .textInput').each(function(){
    console.log(this);
})

因此,您可以从所有.textInput代码中选择所有td个类。如果您没有任何其他$('.textInput')标记,这将无需td即可使用。如果您有多个表,请使用要在选择器中使用的表的id,然后从那里下降到所需的级别。