在jquery中动态更改tabindex

时间:2014-05-14 12:54:34

标签: javascript jquery asp.net

想象一下这个简单的布局(http://jsfiddle.net/4F9cL/)。 我们有一个表,每行我都有一个标签文本框和一个复选框。 第一个文本框有tabindex = 1,第一个复选框有tabindex = 2,第二行的下一个文本框有tabindex = 3,依此类推。

我想要做的是更改文本框内容的同一行复选框上的tabindex,如果文本框的内容已更改。

例如,目前我正在检查已更改thebox内容的行上的复选框,我使用以下代码执行此操作:

 $("input:text").change(function () {
            $(this).parents('tr:first').find('input:checkbox').prop('checked', 'checked');

所以场景如下:如果文本框的内容没有改变,当我选项卡时,我希望焦点更改为同一行上的复选框。如果文本框的内容已更改,我希望焦点位于同一行复选框的INSTEAD下面行上的下一个文本框中。

我希望我解释它足以让你明白我想做什么。 我尝试过使用.removeprop()和.removeattr(),但这不起作用,当下一个标签点击它时,它就会转到页面底部。

2 个答案:

答案 0 :(得分:2)

$("input:text").change(...);

文本框change事件只会在文本框失去焦点后执行。这意味着,当您按Tab键时,该功能尚未运行,您将最终得到旧的tabindex目标。

$("input:text").keyup(...);
$("input:text").keydown(...);

当您按下文件框时,按下(keydown)或释放(键盘)按钮时会触发这些事件。

这样的事情可以解决问题:

$("input:text").keyup(function() {
    var textBox = $(this);
    var textBoxIsEmpty = textBox.val().length == 0; //I assume you use this to determine which element should be the next to get focused when pressing tab.

    var currentTabIndex = parseInt( textBox.attr("tabindex") );

    var nextTarget = GetNextTarget(textBoxIsEmpty); //not sure how you define this. This is the item you want to be your next target when you press tab.
    var nextTabIndex = currentTabIndex + 1;

    nextTarget.attr("tabindex", nextTabIndex);
});

虽然我不能100%确定是否在每个浏览器中动态更改tabindex。

答案 1 :(得分:0)

我已经尝试过这样,它对我来说很好。 在应用此之前,您应该清楚这一点,您已在输入中正确声明了tabindex。

jQuery("input:text").keyup(function() {    
  currentTabIndex = parseInt(jQuery(this).attr("tabindex") );
  nextTabIndex = currentTabIndex + 1;
  jQuery('input[tabindex='+nextTabIndex+']').select();
});