1

在过去的三个小时里,我一直在绕圈子试图解决这个问题,这很奇怪......

我有一个像这样动态生成的无序列表:

var numberOfSlides = 7;

for (i = 0; i < numberOfSlides; i++) {

    main.menu.append("<li class='ui-state-disabled'>List item " + i + "</a></li>");

}

这个正确的渲染(全部禁用):

List item 0
List item 1
List item 2
List item 3
List item 4
List item 5
List item 6

稍后在代码中,我调用了一个应该激活指定项目的函数:

enableMenuItem(2);

enableMenuItem: function(slideNumber){

    console.log("slideNumber: " + slideNumber); // log outputs "slideNumber: 2"

    $("ul li").eq(slideNumber).removeClass('ui-state-disabled'); // this doesn't work

}

它适用于其他值,但不适用于 2,而且我发现如果我调用 enableMenuItem(5),则 2 会被激活。

奇怪的是,如果我这样做...

$("ul li").eq(2).removeClass('ui-state-disabled');

...有用。

但这并不...

if(slideNumber === 2){
    console.log("slideNumber equals 2"); // logs "slideNumber equals 2", so the below line should execute
    $("ul li").eq(2).removeClass('ui-state-disabled'); // doesn't work
}

我是疯了还是这很奇怪?

4

2 回答 2

0

您的enableMenuItem方法声明中有错字:

enableMenuItem: function(slideNumber){
  // Some code
}

您应该将其声明为:

function enableMenuItem(slideNumber) {
  // Some code
}

或者

var enableMenuItem = function(slideNumber) {
  // Some code
}
于 2014-01-19T15:01:05.030 回答
0

由于您要将项目附加到main.menu您应该将事件绑定到同一事物。
像这样:

main.menu.find("> li").eq(slideNumber).removeClass('ui-state-disabled');

如果您在文档中有其他无序列表,$("ul li")也将针对它们。

于 2014-01-19T16:00:40.203 回答