2015-11-19 47 views
1

基本上我試圖改變一些JQuery的背景顏色,將class =「cell」的div加入到class =「grid」的父級div中。因此,「細胞」類不是在原來的index.html

因此它可以定義當我寫這樣的代碼:

$(document).ready(function() { 
    var clr = "red"; 
    $('.cell').mouseenter(function() { 
     $(this).css('background-color', clr); 
    }); 
}); 

但它不是我定義的功能等:

$(document).ready(function() { 
    function fillCell(clr){ 
     $(this).css('background-color', clr); 
    } 

    $('.cell').mouseenter(function() { 
     alert(clr);  //added for test 
     fillCell("red"); 
    }); 

}); 

請注意,當懸停並觸發「紅色」時,警報()會被觸發。

+3

'這個'不符合你的想法。 –

+0

拜託,我錯過了什麼? – Ozilyo

+2

http://stackoverflow.com/a/17514482/400654 –

回答

-1

取而代之。

fillCell.call(this, "red"); 

mouseEnter事件處理程序設置成該事件被觸發的元素上下文(this)。但是,通過將事件處理函數定義提取到事件處理函數的外部,您將丟失this上下文。 .call()可讓您覆蓋該上下文。閱讀更多here

+0

對於最初的錯誤我很抱歉。我學會了不要再用我的手機鍵入答案:) – Merott

+0

非常感謝,看起來像你的方法是最好的做法 – Ozilyo

+0

@Ozilyo感謝您接受答案。我會欣賞一個upvote,來反擊我收到的downvote,因爲我在手機上做的格式不對:) – Merott

-1

this只適用於作爲參數傳入的任何函數(匿名函數或您定義的函數)的上下文中。你可以做的只是通過this作爲你的案例中的函數的參數,因爲你需要它來做額外的事情,它會按你想要的方式工作。

$(document).ready(function() { 
    function fillCell(clr, o){ 
     $(o).css('background-color', clr); 
    } 

    $('.cell').mouseenter(function() { 
     alert(clr);  //added for test 
     fillCell("red", this); 
    }); 
}); 
+0

好吧,現在工作!非常感謝。 – Ozilyo

相關問題