使用jQuery更改select元素中选项的属性

时间:2013-11-12 19:45:07

标签: javascript jquery properties tree-traversal

代码:

function disableOption(pos)
{
    //document.getElementById("selectSuggestion").options[pos].disabled=true;   <-- this is what I want to do

    var option = $(#selectRating).children()[pos];              <-- doesnt work
    $(#selectRating).find(option).prop("disabled", true);

}

function addEventListeners()
{
    $(#selectRating).bind("focus", disableOption(0));
}

function init()
{
    addEventListeners();
}

$(document).ready(init);

我不太熟悉jQuery API和语法,我检查了http://api.jquery.com/category/traversing/和其他类似的线程,但没有找到解决方案。

修改

固定代码:

function disableOption(pos)
{
    $("#selectRating option:eq(" + pos + ")").prop("disabled", true);
}

function addEventListeners()
{
    $("#selectRating").on("focus", function() {disableOption(0);});
}

function init()
{
    addEventListeners();
}

$(document).ready(init);

3 个答案:

答案 0 :(得分:3)

选择器周围的引用!

$("#selectRating")

还可以缩短:$(#selectRating).children()[pos];$("#selectRating option:eq(" + pos + ")").prop("disabled", true);

假设selectRatingselect元素,如果没有,请忽略它。

答案 1 :(得分:1)

怎么样

$('#selectRating option:eq("' + pos + '")').prop('disabled', true);

答案 2 :(得分:1)

您正在调用该函数,而不是将函数引用绑定为处理程序,并记住选择器周围的引号。

$(#selectRating).bind("focus", disableOption(0)); //This just invokes the function as you try to bind the handler.

应该是

$("#selectRating").bind("focus", function(){
     disableOption(0);
});

你需要这样做:

$("#selectRating").children(":eq(" + pos + ")").prop("disabled", true);

或简化为:

function disableOption(pos) {
   $(this).children(":eq(" + pos + ")").prop("disabled", true);
}

function addEventListeners() {
    $('#selectRating').bind("focus", function(){
        disableOption.call(this, 0);
    });
}