/ / Jak wywołać inną funkcję $ ('this') relate hover - jquery

Jak wywołać inną funkcję $ ("this") dotyczą hover - jquery

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 № 1

Jeś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:

  1. przechodzić this jako argument do hover_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
    };
    
  2. 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);
}
});