Przenoszę trochę kodu z funkcji aktywowania na zewnątrz hover_in()
.
$(this)
w działaniu hover_in()
to nie działa, jak to naprawić?
Jak powinienem wymienić $("this")
żeby to zadziałało?
$(".a").hover(function(){
hover_in();
// var hover_id = $(this).attr("id");
}, function(){});
function hover_in(){
var hover_id = $(this).attr("id"); // not work
};
<div class="a" id="a1"></div>
<div class="a" id="a2"></div>
<div class="a" id="a3"></div>
...
Odpowiedzi:
4 dla odpowiedzi № 1Jeśli „rozpakujesz” wywołanie funkcji, będzie działać dobrze:
$(".a").hover(hover_in, function() {});
Powodem jest ustawienie jQuery this
gdy wywołuje dany moduł obsługi, ale w oryginalnej wersji nie robisz nic, aby upewnić się, że jego wartość jest przekazywana do twojego hover_in
funkcja po wywołaniu.
Jeśli nie chcesz, aby moduł obsługi zdarzeń robił cokolwiek innego, nie ma żadnej korzyści z zawinięcia całej funkcji w anonimową funkcję - wręcz przeciwnie, jak już odkryłeś.
Jeśli chcesz zrobić dodatkowe czynności w module obsługi, możesz to zrobić:
$(".a").hover(function(ev) {
hover_in.call(this, ev); // omit "ev" if it"s not needed
...
}, ...);
który wyraźnie wzywa hover_in
z prawem this
wartość.
Zauważ także, że $(this).attr("id") === this.id
- ten drugi jest prostszy i znacznie wydajniejszy.
Ponadto, jeśli nie chcesz przekazać drugiego parametru do .hover
, po prostu użyj .mousenter
zamiast. Jeszcze lepiej:
$(".a").on("mouseenter", hover_in);
function hover_in(){
var hover_id = this.id;
...
};
3 dla odpowiedzi № 2
Masz 2 opcje:
przechodzić
this
jako argument dohover_in
:połączenie wyglądałoby tak:
hover_in(this);
definicja funkcji wyglądałaby następująco:
function hover_in(that) { var hover_id = $(that).attr("id"); // not work };
Aby wywołać to w podobny sposób
hover_in.call(this);
0 dla odpowiedzi № 3
Przekaż wartość jako argument:
$(".a").hover(function(){
var hover_id = $(this).attr("id");
hover_in(hover_id);
}, function(){});
function hover_in(id){
//use id here
};
0 dla odpowiedzi nr 4
Proszę spojrzeć http://jsfiddle.net/2dJAN/55/
$(document).ready(function(){
$(".a").hover(function(){
//var hover_id = $(this).attr("id");
// alert(hover_id);
hover_in($(this));
});
function hover_in(div){
var hover_id = div.attr("id");
alert(hover_id);
}
});