0

我在表单中的所有输入都textarea带有 class large

我正在尝试以下方法,但它不起作用:

if(e.which == 9){ // tab
    $(this).next('textarea.large').focus();
}

我尝试 $next = $(":textarea:eq(" + ($(":textarea").index(this) + 1) + ")"); $next.focus();
无济于事(:textarea 不是有效的伪元素),以及其他一些变体。

我也试过这个:

$(this).next(':input').focus();

我已经在 SO 上检查了其他代码,但它似乎专注于input type='text',并且似乎不适用于我的 textareas。

是否没有简单直接、跨浏览器兼容的方式来获取表单中的所有文本区域并转到下一个?其中一些文本区域将是动态创建的,因此在第一次加载页面时它们不会都存在。但是 tab 需要为所有这些工作。

编辑

这很容易在一个简单的小提琴中解决,但问题是,我在以下条件和事件中发生了一些其他事情:

jQuery(document).on('keydown blur','textarea.large',function(
 if (e.which == 13 || e.type=='focusout' || e.type=='blur' || e.which == 32) //32 is space
 { ... a bunch of stuff on the page, which naturally takes focus out of the current input
  }
});
4

2 回答 2

1

我使用 next() 选择最接近编辑按钮的下一个文本区域时遇到了类似的问题。编辑图像时,单击将文本放入带有 CKEDITOR 的对话框弹出窗口中,其中文本取自 textarea。

html结构:

<tr>
    <td>
        <img src='edit.png' class='edit_comments' />
        <br />
        <textarea>blah blah</textarea>
    </td>
</tr>
<tr>
    <td>
        <img src='edit.png' class='edit_comments' />
        <br />
        <textarea>blah blah</textarea>
    </td>
</tr>

这不起作用:

$( ".edit_comments" ).click(function() {
        var closest_textarea = $(this).next("textarea");

这做到了:

$( ".edit_comments" ).click(function() {
        var closest_textarea = $(this).closest("tr").find("textarea");
于 2014-08-14T11:02:53.000 回答
0

您可以将 tabindex 属性设置为 input 和 textarea 元素。

http://w3schools.com/tags/att_global_tabindex.asp

于 2013-01-01T04:42:24.510 回答