2012-10-09 104 views
0

如何或者甚至有可能從函數中獲取this值?我已經制作了這個片段,它在功能上節省了defaultValue,但是我想直接在dom元素上從函數的外部讀取它。那可能嗎??從函數外部獲取`this`

我做了這一點,在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/

+0

您應該使用'.focus()'而不是'.click()'。 – MiniGod

+0

你想訪問哪個'this'在哪裏?你的問題不清楚。你是什​​麼意思?「直接在DOM元素上讀取」this「*? 'this'不是函數的屬性,它是執行上下文的一個屬性,即'this'的值由函數的調用方式和時間決定。 –

回答

2

你可以將它保存在DOM與表示的元素jQuery的。數據()函數:

做這個頁面加載:

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

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

您可以在以後檢索

...它將返回在頁面加載時設置的值,而不是輸入的當前值。

+0

這是我的方法,但是,我必須通過獲取$('#myElement')。data()。defaultValue; ...不是你的建議。但是,是的,我將使用Data來實現這種方法。 –

+0

@KennethB:'$('#myElement')。data()。defaultValue'等價於'$('#myElement')。data('defaultValue')',實際上它更便宜(或者說它最少)。請參閱http://api.jquery.com/data/#data2 –

+0

你指的是哪一部分?我似乎無法弄清楚你的意思。你的意思是我的appoach或你的,是更便宜? :) –

0

裏面的功能$("input").val(function() {this指一個元件與$("input")查詢。
請注意,$("input")將返回元素列表,即使只有一個元素存在。使用.get()選擇一個元素。
您可以從$("input").get(0).defaultValue訪問defaultValue。 (假設你只想要一個元素)

+0

不,'this'引用DOM元素。 'document.getElementById('search')。defaultValue'包含標籤的文本。 – Mics

0

試試這個:

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

,這些功能是回調函數。這意味着它們在事件被觸發時運行,(來自jQuery)。因此,在這種情況下,this實際上取決於jQuery來決定..在這種情況下是事件綁定到的元素。

在一個側面說明,它看起來像你正在尋找的佔位符屬性(僅適用於HTML5,但你可以找到舊版本瀏覽器插件)