0

我有以下html代码:

<input type="text" name="username" width="40" size="9">
<span name="foo"></span>
<input type="password" name="password" width="40" size="9">

单击用户名时,我想获得下一个输入元素名称,并且我做了什么:

$(document).on("click", function (e) {
    var NextElement = $(e.target).next().attr("name"); //return foo
});

但是,我得到了 "foo" ,我实际上想要下一个输入元素,所以我做了:

    var NextElement = $(e.target).next("input").attr("name"); // return undefined

正如我期望得到的“密码”,这个返回“未定义”。

看这个人的jsfiddle演示。

我做错了什么?

谢谢!

4

4 回答 4

2

由于next仅检查紧随其后的元素,因此没有直接功能,但您可以这样做:

var NextElement = $(e.target).nextUntil("input").last().next().attr("name");

示范

通常我会找到另一种不依赖元素顺序的解决方案,例如提供相关元素 id 的数据属性。当然,如果订单确实决定了要获取的元素。

于 2013-06-04T12:20:29.700 回答
1

使用nextAll()

http://jsfiddle.net/KBWdh/2/

var NextElement = $(e.target).nextAll("input").attr("name");
于 2013-06-04T12:18:51.650 回答
1

你可以这样做:

var NextElement = $(e.target).find("input:password").attr("name");

由于 click 事件被添加到 中document,我们需要在 中找到输入documentnext()方法在这里不起作用,正如您所期望的那样。

于 2013-06-04T12:19:19.413 回答
0

next() 将返回下一个兄弟,不管你在括号中放了什么。或者正如文档所说:

如果提供了选择器,则仅当它与该选择器匹配时,它才会检索下一个兄弟。

使用.next().next()nextAll()

var NextElement = $(e.target).nextAll("input").filter(':first').attr("name");
于 2013-06-04T12:19:47.317 回答