簡體   English   中英

jQuery無法分配給函數結果

[英]jQuery cannot assign to a function result

我在以下代碼中收到上述標題中的錯誤:

 $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';
      }
});

我不明白為什么我會收到這個錯誤,因為我已經確定我使用賦值運算符==來比較字符串

您的問題有兩個問題:第一個問題已由@Mike Vranckx回答 ,正確使用.css() setter正在傳遞第二個參數以設置為值。

另一個問題是你的情況永遠不會成真,我將在這個答案中解決。 如果你按我建議的方式修復它,你將不需要.css()


getComputedStyle / jQuery的.css()返回的計算CSS值並不完全是您在代碼中編寫的 - 它們在解析為CSSOM時會遭受轉換。

例如,在Chrome中:

body { background-color: transparent; }

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

你自己看。

這就是你的$(...).('background-color') == 'transparent'條件總是假的原因。


最干凈和跨瀏覽器的解決方案是使用類( .addClass().addClass() removeClass()toggleClass() )應用樣式,並使用.hasClass()進行條件檢查。

在你的情況下, .toggleClass應該足夠了。 這是編寫邏輯( 小提琴 )的簡單方法:

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

.bg-gray {
    background: #eee;
}

要設置/更改background-color屬性,需要將其作為第二個參數傳遞:

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

雖然比較使用背景顏色更好地使用這樣的rgba

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

要為css賦值,請將值作為第二個參數傳遞。
以下行將更改為

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

以下行

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

使用CSS類會更干凈,更快速,更容易修改:

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

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

同時避免使用像“table”這樣的保留字來表示類名,這很令人困惑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM