jQuery无法分配给函数结果

时间:2014-05-19 12:34:42

标签: javascript jquery html css

我在以下代码中收到上述标题中的错误:

 $j(".table").delegate('td','click', function(e) {
      //alert($j(this).parent().css('background-color'));
      if ($j(this).parent().css('background-color') == 'transparent') 
        $j(this).parent().css('background-color') = '#eee';
      else {
        $j(this).parent().css('background-color') = 'transparent';
      }
});

我不明白为什么我会收到此错误,因为我已确保使用赋值运算符==来比较字符串

5 个答案:

答案 0 :(得分:2)

您的问题有2个问题:第一个问题已经answered by @Mike Vranckx.css() setter的正确用法是传递第二个参数设置为值。

另一个问题是你的情况永远不会成真,我将在这个答案中解决它。如果你按我建议的方式修复它,你就不会需要.css()


getComputedStyle / jQuery .css()返回的

Computed CSS values并不完全是您在代码中创作的内容 - 它们在解析时会遭受转换进入CSSOM。

例如,在Chrome中:

body { background-color: transparent; }

console.log( $('body').css('background-color') ); //returns "rgba(0, 0, 0, 0)"

See for yourself.

这就是为什么$(...).('background-color') == 'transparent'条件总是错误的。


最干净和跨浏览器的解决方案是在类(.addClass()removeClass()toggleClass())上应用样式,并使用.hasClass()进行条件检查。

在你的情况下,.toggleClass应该足够了。这是编写逻辑的简单方法(fiddle):

$j(".table").on('click', 'td', function() {
    $j(this).parent().toggleClass('bg-gray');
});

.bg-gray {
    background: #eee;
}

答案 1 :(得分:1)

要设置/更改 background-color 属性,您需要将其作为第二个参数传递:

$j(this).parent().css('background-color', '#eee');

答案 2 :(得分:0)

使用背景颜色进行比较时更好地使用rgba这样

$j(this).parent().css('background-color', 'rgb(0,0,0)');

答案 3 :(得分:0)

要为css赋值,请将该值作为第二个参数传递  以下行将更改为

 $j(this).parent().css('background-color') = '#eee';

以下行

 $j(this).parent().css('background-color','#eee');

答案 4 :(得分:0)

使用CSS类会更干净,更快速,更容易修改:

.table td { background-color: transparent; }
.foo { background-color: #EEE; }

$j( '.table' ).delegate( 'td', 'click', function() {
    $( this ).toggleClass( 'foo' );
});

同时避免使用像“table”这样的保留字来表示类名,这很令人困惑。