事件绑定中的动态变量

时间:2011-05-03 11:22:18

标签: javascript jquery

我遇到了在jQuery中绑定动态事件的问题。我想要实现的是让事件作用于先前已设置的变量。例如,我有

someFunc = function (form_id)
{
    $("input").bind("focus", function ()
    {
        $("#"+form_id).css({"border":"1px solid red"});
    });
}

someFunc("edit_form");
somefunc("add_form");

现在这是我想要做的一个大的简化,但是绑定时变量的动态特性是我需要的。这里的问题是,基本上我希望jQuery在应用绑定时的“form_id”上执行,而是在触发焦点时执行“form_id”时执行。

我理解为什么会发生这种情况,我的问题是我如何才能实现我正在寻找的功能。 (这里再次形成只是一个例子,而不是实际的功能)。

修改1:

这可能是我想要实现的更好的例子:

Dog.prototype = {
    name: "Dog",

    bind_function : function ()
    {
        name = this.name;

        $(name+"_edit_form input[name='something']").bind("focus", function ()
        {
            console.log(name);
        })
    }
}

function Dog() {
    this.breed = "Chihuaha";
}

Rover = new Dog();
Rover.bind_function();

Fido = new Dog();
Fido.bind_function();

现在我希望专注于生成特定狗名称的控制台日志,但是目前它只会控制日志中最后一只狗的名字?

2 个答案:

答案 0 :(得分:1)

我一直在寻找eventData来在绑定时传递变量而不是执行。关于bind()的jQuery文档页面大约一半:

http://api.jquery.com/bind/

答案 1 :(得分:0)

我认为这就是你所追求的目标?

$("form").each(function() {
    var id = $(this).attr("id");
    $("input", $(this)).bind("focus", function ()
    {
        var border = "";
        switch (id) {
            case "edit_form":
                border = "1px solid red";
                break;
            case "add_form":
                border = "1px solid blue";
                break;
        }

        $(this).css( { border: border });
    });
});

虽然没有使用你的功能,但它会根据聚焦的元素表单ID分配不同的CSS。

Live test case