-2

代码:

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);
4

3 回答 3

3

在您的选择器周围引用!

$("#selectRating")

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

那是假设selectRating是一个select元素,如果不是,请忽略它。

于 2013-11-12T19:46:52.383 回答
1

怎么样

$('#selectRating option:eq("' + pos + '")').prop('disabled', true);
于 2013-11-12T19:47:23.863 回答
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);
    });
}
于 2013-11-12T19:48:25.720 回答