0

我有一个看起来有点像这样的方法:

function turnBlue()
{
    $(this).css('background-color','blue');
}

function fillWithGoodies(obj)
{
    var goodie_box = $("<div id='goodie_box'>Goodies!  Click me and my parent will turn blue.</div>");
    $(obj).append(goodie_box);
    $(goodie_box).on('click', obj, turnBlue);
}

问题是当调用 turnBlue() 时,“this”是 goodie_box div,而不是 obj。(我想要对象)

JQuery 曾经有一个 .selector() 方法,但使用起来看起来并不安全。 http://api.jquery.com/selector/ 如果它有效,我会这样做:

    $(goodie_box).on('click', $(obj).selector(), turnBlue);

有没有办法在不改变架构的情况下做到这一点?

注意:我知道我可以改为执行以下操作,但我这里的示例只是真实代码的一个子集。我的问题是:你能以某种方式获得一个对象的选择器吗?

    // Don't want to have to do this:
    $(obj).on('click', function() { doSomething(obj) } );

注意#2:调用 parent() 不是解决这个问题的方法:真实的代码创建了一个复杂的动态对象,并且父对象可以在任何深度。

4

3 回答 3

2

有许多选择器,CSS 类、伪类等组合的可能性不计其数。我不相信实施它是切实可行的。您的链接还说...属性从来都不是可以使用的选择器的可靠指标...

此外,该selector属性不适用于您可能已经理解的使用。看看文档:一个选择器字符串,用于过滤触发事件的选定元素的后代

但是有可能将数据传递给处理程序。文档中的示例:

function greet(event) { alert("Hello "+event.data.name); }
$("button").on("click", { name: "Karl" }, greet);
$("button").on("click", { name: "Addy" }, greet);

因此,在您的情况下,它将如下所示:

function turnBlue(event) {
    $(event.data).css('background-color','blue');
}

function fillWithGoodies(obj) {
    var goodie_box = $("<div id='goodie_box'>Goodies!  Click me and my parent will turn blue.</div>");
    $(obj).append(goodie_box);
    $(goodie_box).on('click', obj, turnBlue);
}
于 2013-07-01T14:53:22.433 回答
0

你能做这个吗?

function doSomething(that)
{
    console.log(that);
}

function fillWithGoodies(obj)
{
    $(obj).append("<div id='goodie_box'>Goodies!</div>");
    $(obj).click(function(){
      doSomething(obj);
    });
}
于 2013-07-01T14:54:14.923 回答
0

如果你放了一个参数on([selector])并且它不是一个选择器,它会变成[data],所以你可以试试这个:

function turnBlue(e)
{
    $(e.data).css('background-color','blue');
}

function fillWithGoodies(obj)
{
    var goodie_box = $("<div id='goodie_box'>Goodies!  Click me and my parent will turn blue.</div>");
    $(obj).append(goodie_box);
    $(goodie_box).on('click', obj, turnBlue);
}

有关更多信息,请参阅在 jQuery.on()中传递数据

于 2013-07-02T06:34:42.563 回答