使用 jQuery 查找所选选项的名称

发布于 2024-09-24 03:55:27 字数 516 浏览 3 评论 0原文

我制作了一个 jquery/ajax 函数来更新 #courses,发送 #fos 的 .val() 和 .text(),特别是所选的函数,如下所示:

$('#selling #fos').change(function() {
    $.post('/ajax/courses',
        {
            fos_id: $('#selling #fos').val(),
            name: $('#selling #fos :selected').text()
        },
    function(data) {
        $('#selling #courses').html(data);
    });
});

How do I Extend this function so that it use 'this ',允许我在同一页面上多次重用此函数吗?我被抓住了,因为你不能使用 name: $(this + ' :selected').text()

I've made a jquery/ajax function that updates #courses, sending #fos's .val() and .text(), specifically of the one that is selected, like so:

$('#selling #fos').change(function() {
    $.post('/ajax/courses',
        {
            fos_id: $('#selling #fos').val(),
            name: $('#selling #fos :selected').text()
        },
    function(data) {
        $('#selling #courses').html(data);
    });
});

How do I extend this function so that it uses 'this', allowing me to reuse this function multiple times on the same page? I'm caught because you can't use name: $(this + ' :selected').text().

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

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

发布评论

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

评论(4

清眉祭 2024-10-01 03:55:27

这应该有效:

$("#"+$(this).attr("id")+" :selected")

它不漂亮,但它确实有效:)

或者这会有效:

$(this).find(":selected").text()

This should work:

$("#"+$(this).attr("id")+" :selected")

it's not pretty but it does the trick :)

or this will work:

$(this).find(":selected").text()
没企图 2024-10-01 03:55:27

我认为您正在寻找的是 .filter()

name: $(this).filter(':selected').text()

如果未选择它,它将返回空字符串

好运气!

编辑

我没有看到Brett在“:selected”之前有一个空格,这意味着他正在寻找一个孩子。 Stefanvds 建议使用 find() 会很好地工作。
filter() 检查当前 dom 是否为“:selected”,而 find() 将查找所有级别的子级。如果您知道要查找的选定 dom 是直接的,您也可以使用 .children() “this”的子级,因为它效率更高,因为您只寻找一级子级。

name: $(this).children(':selected').text()

I think what you are looking for is .filter()

name: $(this).filter(':selected').text()

It will return empty string if it's not selected

Good luck!

Edit:

I didn't see that Brett had a space before ":selected" which means he is looking for a child. Stefanvds suggestion to use find() will work fine.
filter() checks if the current dom is ":selected" while find() is going to look for the children on all levels. You could also use .children() if you know that the selected dom you are looking for is a direct child of "this" as it is a lot more efficient since you are only looking for one level of children.

name: $(this).children(':selected').text()
昔梦 2024-10-01 03:55:27

没有 jQuery

没有 jQuery 的情况下做到这一点非常简单。在 change 事件侦听器内,可以使用 this.options[this.selectedIndex] 访问所选选项。从那里,您可以访问所选选项元素的 value/text 属性。

此处示例

var select = document.querySelector('#select');

select.addEventListener('change', function (e) {
    var selectedOption = this.options[this.selectedIndex];

    console.log(selectedOption.value);
});

var select = document.querySelector('#select');

select.addEventListener('change', function (e) {
    var selectedOption = this.options[this.selectedIndex];
    
    alert(selectedOption.value);
});
<select id="select">
    <option>One</option>
    <option>Two</option>
    <option>Three</option>
</select>

Without jQuery

It's pretty simple to do this without jQuery. Inside of a change event listener, the selected option can be accessed using this.options[this.selectedIndex]. From there, you can access the value/text properties of the selected option element.

Example Here

var select = document.querySelector('#select');

select.addEventListener('change', function (e) {
    var selectedOption = this.options[this.selectedIndex];

    console.log(selectedOption.value);
});

var select = document.querySelector('#select');

select.addEventListener('change', function (e) {
    var selectedOption = this.options[this.selectedIndex];
    
    alert(selectedOption.value);
});
<select id="select">
    <option>One</option>
    <option>Two</option>
    <option>Three</option>
</select>

谈场末日恋爱 2024-10-01 03:55:27

您还可以使用 jQuery 的第二个参数(上下文)来避免不必要的“过滤器”、“查找”、“子项”等。这允许您的选择器类似于:

$('select[name="myselect"]').on('change',function(){
    var selectedOptionName = $('option:selected',this).text();
    console.log(selectedOptionName);
});

You can also use jQuery's second argument (context) to avoid the unnecessary "filter", "find", "children" etc. This allows your selector to be something like:

$('select[name="myselect"]').on('change',function(){
    var selectedOptionName = $('option:selected',this).text();
    console.log(selectedOptionName);
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文