我正在创建一个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"提供正确的上下文。
答案 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);
}