如何使以下jQuery代码段工作?

时间:2009-09-06 06:15:29

标签: jquery this

var func = function()
{
    $(this).hide();
    $parent = $(this).parent();
    $parent.removeClass('my_signature_mouseover');
    var text = $(this).val();
    var $span = $("#status span");
    $span.text(text);
    $span.show();
};
$("#status input").keyup(function (e) {
    var keyCode = e.keyCode || e.which;
    if (keyCode == 13) {
       func();
    }
}).blur(func);

如果模糊或按“Enter”,我想让func运行。 但上面的代码只有在模糊时才有效 在按“Enter”的情况下,它报告“拒绝访问parentNode的权限”。

虽然我知道它与this关键字在不同的上下文中有关,但我不知道如何修复它。

2 个答案:

答案 0 :(得分:1)

您使用正常的函数调用调用func,导致func内部,this变量将引用全局对象(窗口)。

您必须使用call执行该函数,以保留上下文('this'值),这是触发事件的元素:

$("#status input").keyup(function (e) {
    var keyCode = e.keyCode || e.which;
    if (keyCode == 13) {
       e.preventDefault(); // stop event propagation
       func.call(this);
    }
}).blur(func);

答案 1 :(得分:-1)

试试这个:

var func = function(elem)
{
    elem.hide();
    var $parent = elem.parent();
    $parent.removeClass('my_signature_mouseover');
    var text = elem.val();
    var $span = $("#status span");
    $span.text(text);
    $span.show();
};
$("#status input").keyup(function (e) {
    var keyCode = e.keyCode || e.which;
    if (keyCode == 13) {
       func($(this));
    }
}).blur(function () {
    func($(this));
});