jquery $(this).attr(…) 返回未定义

发布于 2024-12-27 18:13:16 字数 350 浏览 0 评论 0原文

我正在尝试获取 option 元素的标题,但它始终返回未定义。 $(this).attr("name")...和 ​​$(this).attr("value") 也会发生这种情况,但奇怪的是 $( this).val() 有效(如预期)。不过,我可以使用 $(this).attr("value", "baz") 设置该值。

小提琴: http://jsfiddle.net/jshado1/JgAJC/1/

I'm trying to get the title of an option element, but it keeps returning undefined. This also happens for $(this).attr("name")…and $(this).attr("value"), but curiously $(this).val() works (as expected). Yet, I'm able to set the value with $(this).attr("value", "baz").

Fiddle: http://jsfiddle.net/jshado1/JgAJC/1/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

于我来说 2025-01-03 18:13:16

this 指向

this.options[this.selectedIndex]

完整代码(您可以安全地解开 $opt 的 jquery 包装器,并使用 $opt.title$opt.name< /code>,这些在所有浏览器中都是安全的):

$('select').change(function() {
    var $opt = $(this.options[this.selectedIndex]),
        t = $opt.attr("title"),
        n = $opt.attr("name"),
        v = this.value;
    $("#name").text("name: "+n);
    $("#title").text("title: "+n);
    $("#value").text("value: "+v);
});

另一种方法,jQuery 方式是:

$('select').change(function() {
    var $opt = $(this).children(':selected'),
        t = $opt.attr("title"),
        n = $opt.attr("name"),
        v = this.value;
    $("#name").text("name: "+n);
    $("#title").text("title: "+n);
    $("#value").text("value: "+v);
});

this points to the <select> element. For the selected option, use:

this.options[this.selectedIndex]

Full code (you can safely unwrap $opt's jquery wrapper, and use $opt.title and $opt.name, these are safe across all browsers):

$('select').change(function() {
    var $opt = $(this.options[this.selectedIndex]),
        t = $opt.attr("title"),
        n = $opt.attr("name"),
        v = this.value;
    $("#name").text("name: "+n);
    $("#title").text("title: "+n);
    $("#value").text("value: "+v);
});

Another method, the jQuery-way is:

$('select').change(function() {
    var $opt = $(this).children(':selected'),
        t = $opt.attr("title"),
        n = $opt.attr("name"),
        v = this.value;
    $("#name").text("name: "+n);
    $("#title").text("title: "+n);
    $("#value").text("value: "+v);
});
寒尘 2025-01-03 18:13:16

这是因为您错误地理解了 this 在代码中代表的含义。 this 表示已更改的 select 元素。因为 select 节点没有 title 属性,所以它是未定义的。您需要做的是枚举选择的选项列表并找到选定的项目。然后,您可以对该项目进行操作以查找信息,如下所示:

 var element = $(this.options[this.selectedIndex]);

 element.attr('title');

This is because you have mistaken what this represents in your code. The this represents the select element that has changed. Because the select node doesnt have a title attribute, it is undefined. What you would need to do is enumerate over the options list of the select and find the item that is selected. Then, you can operate on that item to find information like so:

 var element = $(this.options[this.selectedIndex]);

 element.attr('title');
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文