2013-11-27 53 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()不会引用您所期望的值。