2011-02-06 13 views
6

Funkcja ta ma na celu zmienić kolor tła obiektu kliknięciudlaczego nie jest to kod kierowania wybierak w prawo

function colorMe(){ 
    $(this).css('background-color', 'red'); 
} 

nazywam go tak jak to

$('.colorme').click(colorMe); 

i zmienia tło tego div

<div class="colorme">Color Me</div> 

Problem polega na tym, że chcę zrobić coś innego, zanim uruchomię colorMe. Więc nie mogę użyć tylko $('.colorme').click(colorMe);. Co próbuję zrobić, to coś takiego, ale to nie wpływa na element div. Myślę, że utracił on ślad na div. Czy muszę go przekazać i jak?

+0

Czy próbowałeś umieścić tę linię: $ (this) .css ('background-color' "czerwony"); w funkcji kliknięcia, zamiast funkcji autonomicznej –

Odpowiedz

5
function colorMe(elt){ 
    $(elt).css('background-color', 'red'); 
} 

$('.colorme').click(function(){ 
    alert('something happens first, then colorMe is called'); 
    colorMe(this);   //I call colorMe here.. 
}); 

Aby wywołać funkcję w obiekcie jQuery jak ty tutaj

$(this).colorMe() 

trzeba by zbudować wtyczki (I edycja ją dodać klasę)

// css 
.red { 
    background: red; 
} 

// js 
(function($) { 
    $.fn.extend({ 
     colorMe: function() { 
      this.addClass("red"); 
     }, 
     unColorMe: function() { 
      this.removeClass("red"); 
     } 
    }); 
})(jQuery); 

Wtedy byłbyś w stanie zrobić

$(".a_class").colorMe(); 
$(".a_class").unColorMe(); 
+0

Dobra odpowiedź, Robin i wyjaśnienie wtyczki. Chciałbym także wyrazić opinię JK, że używanie klasy jest lepsze niż podkreślanie stylu. – Nimrod

+0

+1 Ale pamiętaj, że wywołanie "każdego" jest niepotrzebne, ponieważ '$ .fn.css' zawiera jedną. – lonesomeday

+0

Zmieniłem wtyczkę, aby dodać klasę, usunięto niepotrzebną pętlę i dodano unColorMe. – Robin

3

Należy użyć metody .addClass().

function colorMe(element){ 
    element.addClass('my-red-class'); 
} 

$('.colorme').click(function(){  
    colorMe(this);   
}); 

A w pliku css masz klasę o nazwie 'moja-czerwono-klasa' (użyć lepszej nazwy!)

.my-red-class { background-color: red; } 

I można również łatwo usunąć CSS:

function unColorMe(element){ 
    element.removeClass('my-red-class'); 
} 
+0

Twój zasięg jest nieprawidłowy: wywołanie "kliknięcie" zostanie przekazane jako element DOM, a nie obiekt jQuery; Elementy DOM nie mają metody "addClass()". – Phrogz

1
function colorMe(){ 
    $(this).css('color', 'red'); 
} 

za pomocą połączenia()

$('.colorme').click(function(){ 
    alert('something happens first, then colorMe is called'); 
    colorMe.call(this); 
});