为什么jQuery parent()。index()在jQuery小部件中使用时不起作用

时间:2014-11-11 20:17:32

标签: jquery jquery-widgets

我正在创建一个jQuery小部件。 我已经设置了这个代码示例,以尽可能地匹配我原来的情况......

function someFunction(){
$("#somediv").on("click", ".rem", $.proxy(this.handleEvent, this));
}

function handleEvent(that){
    var testval = $(that).parent().index();
   console.log(testval);
}

someFunction();

JSBin在这里----> http://jsbin.com/cewevo/

问题在于,无论“X'单击按钮,索引结果为' -1'。 我已经尝试了我能想到的每个元素路径,但我能做的最好的事情就是获取相关按钮单击的innerText。我需要索引,以便我可以删除用于填充列表的原始数组中的正确元素。

这样的代码按预期工作,除了下面的行在小部件上下文中对我不起作用。

  $("somediv").on("click", ".rem", function(){
    var testval = $(this).parent().index();
});

我正在使用.proxy函数来尝试为函数" handleEvent"提供正确的上下文。

3 个答案:

答案 0 :(得分:0)

我已更新您的代码,使其符合您的预期:

function someFunction(){
$("#somediv").on("click", ".rem", function() { 
      $.proxy(handleEvent, this)();
    });
}

function handleEvent(){
   var testval = $(this).parent().index();
   console.log(testval);

}

someFunction();

这里的关键是将$.proxy包裹在function()内。由于背景错误,它没有按预期工作。如果没有内部函数,this内的$.proxy指的是jQuery本身,而不是点击的jQuery对象。 on的函数参数将被点击的元素作为其上下文。

答案 1 :(得分:0)

我认为你过度复杂了。

http://jsbin.com/kekadubeca/2/

只需在UL上添加一个类,这样就可以更容易地调用和中提琴

var items = $('.myUl li').click(function() {
    console.log(items.index(this));

});

答案 2 :(得分:0)

我不认为使用$.proxy是最好的选择,因为在您的情况下handleEvent始终接收鼠标事件作为参数。

以下代码给出了您想要的结果。

function someFunction(){
    $("#somediv").on("click", ".rem", $.proxy(this.handleEvent));
}

function handleEvent(that){
    var testval = $(that.target).parent().index();
    console.log(testval);
}