按钮单击(或按Ctrl +向下箭头)将焦点移动到GridView中的下一个文本框

时间:2013-12-09 11:37:32

标签: jquery asp.net gridview

我正在使用带有最新版本jQuery的asp.net web form 4.0。 我的页面包含几个按钮和输入。

我要做的是将焦点设置在gridview中的下一个输入字段。此输入字段具有特定的类。该行为仅在单击按钮或按下ctrl +向下箭头时才有效。

我的gridview的类是GridView,我输入的类是toControl。 因此,这会创建一个带有行=“GridView”的表。有些行的td带有class =“toControl”的输入。

我用.next,.nextAll甚至索引编写了几个东西,但我猜我有一些特定的解决方案。

我用于按钮和点击事件的两个功能是:

$(document).keydown(function (e) {
        if (e.keyCode == 40 && e.ctrlKey) {
            e.preventDefault();
            NextError();
        }
    });

$('#ButtonNext').on('click', function () {
    NextError();
});

NextError函数:

 function NextError() {
                $('.GridView .toControl:first').focus();
  }

现在显示下一个错误字段,重点是我的GridView中的第一个toControl。这段代码有效。 但是,当我尝试下面的代码行时,它不起作用。

$('.GridView .toControl').next().focus();

所以即使基本功能也不起作用。如果我设法解决这个问题,我甚至必须更进一步。当用户使用toControl填充输入时,它会丢失该类。我正在考虑通过一个经过验证的课程来否定它,因为这很困难。

那我到底错在了什么?我已经搜索了大量的stackoverflow问题,但第一个焦点是我得到的最接近的问题。

编辑:根据要求,我添加了gridview生成的html。

<table class="GridView" id="MainContent_GridView1" style="border-width: 0px; border-collapse: collapse;" rules="all" cellspacing="0">
        <tbody>
<tr class="errorRow" onclick="ShowCase(image link,image link)">
            <td>0003_CASE1</td><td>1</td><td>1</td><td>
                            <input name="ctl00$MainContent$GridView1$ctl02$GridViewValidate" class="toControl" id="MainContent_GridView1_GridViewValidate_0" type="number">
                        </td>
        </tr><tr>
            <td>0003_CASE2</td><td>2</td><td>1</td><td>
                            <input name="ctl00$MainContent$GridView1$ctl03$GridViewValidate" disabled="disabled" class="aspNetDisabled" id="MainContent_GridView1_GridViewValidate_1" type="number">
                        </td>
        </tr><tr class="errorRow" onclick="ShowCase('image link,image link)">
            <td>0003_CASE3</td><td>3</td><td>1</td><td>
                            <input name="ctl00$MainContent$GridView1$ctl04$GridViewValidate" class="toControl" id="MainContent_GridView1_GridViewValidate_2" type="number">
                        </td>
        </tr><tr>
            <td>0003_PAGE3</td><td>3</td><td>1</td><td>
                            <input name="ctl00$MainContent$GridView1$ctl05$GridViewValidate" disabled="disabled" class="aspNetDisabled" id="MainContent_GridView1_GridViewValidate_3" type="number">
                        </td>
        </tr>
    </tbody></table>

1 个答案:

答案 0 :(得分:0)

我会抓住符合条件的所有输入,然后跟踪“ctrl + down”按键之间的位置。

基本上,它的作用是保留jQuery对象“errorControls”中所有“toControl”控件的列表,并使用{{1}跟踪输入列表中的当前索引。变量。

每次调用index时,索引都会递增。如果它是列表中的最后一个元素,则“index”将重新设置为零。

以下是代码:

NextError

这是一个指向JSFiddle的链接,显示了在您的示例HTML表上运行的JS代码:http://jsfiddle.net/kKhS2/