2013-11-27 97 views
1

我有一個用戶選擇背景色:jQuery的鏈接VAL()

var _back = "#FF0000"; 

爲什麼不這樣設置我的輸入欄的背景色:

$("#input").val(_back).css("background-color",$(this).val()); 

時這樣做:

$("#input").val(_back).css("background-color",$("#input").val()); 

但是,如果我介紹一個.each()

$("#input").val(_back).each(function(){$(this).css("background-color",$(this).val()) }) 

回答

3

你已經有一個變量的值。只需添加在CSS法:

$("#input").val(_back).css("background-color", _back); 

另一個原因,這將是更好的,就是你不需要jQuery的啓動方法.val(),節省一些開銷。

它不起作用的原因是因爲在css方法中$(this) doesnt存在(以及它,但它不指向你想要的元素)。像eachanimate這樣的函數設置了this值,css doesnt。這可能是因爲沒有很多理由使用this在css

+0

我正在完善我現在的鏈接概念..關於開銷的好處 - 當我試圖複製源代碼行時,我的麻煩開始了更容易(只使用一次變量名稱) - 懶惰和愚蠢.. – T4NK3R

+0

+ 1ed早些時候的答案,但我不知道你的意思是什麼「$(this)」不存在於CSS方法? css方法可能不會爲'this'提供它自己的上下文,但它仍然存在並且可以被查詢。 '$(「#input」).val('test-value').css(「background-color」,console.log($(this)));'它不會將背景顏色設置爲任何東西將執行並記錄'window'(如果在頂層)爲'$(this)'確實存在 - [** fiddle **](http://jsfiddle.net/u5RFW/)。 – Nope

+0

不要過高的開銷,但。每一點都有所幫助,如果你不能做,就不要這樣做。但是,如果可讀性和靈活性受到太多的影響,只需堅持一種方法 – Martijn

1

因爲$(this)是指你在功能,但鏈上val()功能的結束css()功能不嵌套函數,所以沒有this對象引用。

您還可以通過書面形式把它簡化:

$("#input").css("background-color", _back); 
+0

Stackoverflow是一個很棒的資源 - 很多偉大的答案 - 馬上!你的幫助也是如此。我會給你的複選標記,但被馬蒂斯斯的+1號嚇住了:) – T4NK3R

0

你的「這」行等同於以下2行:

var that = this; 
$("#input").val(_back).css("background-color",$(that).val()); 

如果你是在一個範圍內,其中this不是輸入,$(this).val()不會引用您所期望的值。