从函数外部获取`this`

时间:2012-10-09 07:43:13

标签: javascript jquery

如何或甚至可以从函数中获取this值?我已经制作了这个代码片段,可以在函数外部保存defaultValue,但我希望直接在dom元素上从函数外部读取它。那可能吗?

我在jQuery中做到了这一点:

$("input").val(function() {
    var $label = $("label[for='" + $(this).attr("id") + "']");
    this.defaultValue = $label.text();
    $label.hide()
    return this.defaultValue
}).click(function() {
    if ($(this).val() == this.defaultValue) {
        $(this).val("");
    }
}).bind("blur", function() {
    if ($(this).val() == "") {
        $(this).val(this.defaultValue);
    }
});

在此处查看此行动:http://jsfiddle.net/ZUZ3L/g6dMA/

4 个答案:

答案 0 :(得分:2)

您可以使用jQuery的.data()函数将其保存到DOM中表示的元素:

在pageLoad上执行此操作:

$(this).data('defaultValue', $(this).val());

您可以稍后通过以下方式检索它:

alert($('#myElement').data('defaultValue');

...将返回pageload设置的值,而不是输入的当前值。

答案 1 :(得分:0)

在您的函数$("input").val(function() {中,this引用$("input")查询中的一个元素。
请注意,$("input")将返回元素列表,即使只存在一个元素。使用.get()选择元素 您可以从defaultValue访问$("input").get(0).defaultValue。 (假设你只想要一个元素)

答案 2 :(得分:0)

试试这个:

<input onfocus="if (this.value==this.defaultValue) this.value = '';" onblur="if (this.value=='') this.value = this.defaultValue;" name="search" value="Search">

答案 3 :(得分:0)

这些函数是回调函数。这意味着它们在事件被触发时运行(来自jQuery)。所以,在这个上下文中this实际上取决于jQuery来决定..在这种情况下是绑定事件的元素。

在旁注中,看起来您正在寻找占位符属性(仅在HTML5中可用,但您可以找到旧版浏览器的插件)