Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery .on() bind function error? O.o (https://javascript.ru/forum/jquery/30879-jquery-bind-function-error-o-o.html)

Arris 19.08.2012 00:12

jQuery .on() bind function error? O.o
 
Читаю статью по тут

Код:

...В качестве параметра handler должна быть указана
функция (или значение false, но об этом позже).
Это может быть анонимная функция:

$('#foo').on('click', function(){
  alert('Вы нажали на элемент "foo"');
});

или именем заданной функции:

function myFunction(){
  alert('Вы нажали на элемент "foo"');
});
$('#foo').on('click', myFunction);

Пишу:
Код:

function handlerOn(txt)
{
    $("span#text").html(txt);
}

И вот так:

Код:

$('a[href*=localhost]').on('mouseover',function(){
        handlerOn(this.href);
    });

Все отлично, при наведении на <a href="localhost/">..<> получаем в нужном спане ожидаемое...

А если сказать вот так:
Код:

$('a[href*=localhost]').on('mouseover', handlerOn(this.href));
Мы получаем... ничего не получаем.
Более того, если в handlerOn() вставить alert('!') - при старте страницы нам выдадут алерт и больше не произойдет ничего. Даже если просто сказать " ,handlerOn ) (и в функции сказать скажем alert('!') - мы получим ту же фигню.


Что я делаю не так?

vadim5june 19.08.2012 00:26

Цитата:

Сообщение от Arris
.В качестве параметра handler должна быть указана
функция (или значение false, но об этом позже).
Это может быть анонимная функция:
или именем заданной функции:

а handlerOn(this.href) -это не то и не другое-это обращение к функции-в данном случае
ошибка очевидная-в то время как раньше у Вас была функция
function(){ handlerOn(this.href);}

Arris 19.08.2012 00:39

Цитата:

Сообщение от vadim5june (Сообщение 198665)
а handlerOn(this.href) -это не то и не другое-это обращение к функции-в данном случае
ошибка очевидная-в то время как раньше у Вас была функция
function(){ handlerOn(this.href);}

Вы не поверите... ну ладно, допустим это вызов... но почему так происходит? И как мне теперь передать в функцию какие-то конкретные данные?

объект event внутри функции не определен, хотя статья как бы утверждает, что в хэндлер передается объект event содержащий кучу нужного...

vadim5june 19.08.2012 00:51

я не проверял но Вы в первом посте писали
Все отлично, при наведении на <a href="localhost/">..<> получаем в нужном спане ожидаемое...
а что теперь изменилось?

Arris 19.08.2012 00:52

собственно вот:
Код:

function handlerTest()
{
    alert(this);
}

$('a[href*=localhost]').on('mouseover', handlerTest);

алерт гарантированно выводит href соотв. ссылки.
А если мне нужен не href? А title? Или что-нибудь еще?

Arris 19.08.2012 00:54

Цитата:

Сообщение от vadim5june (Сообщение 198670)
я не проверял но Вы в первом посте писали
Все отлично, при наведении на <a href="localhost/">..<> получаем в нужном спане ожидаемое...
а что теперь изменилось?

"Ожидаемое" относится к использованию анонимной функции

, function() { callHandler() } )
С ней то как раз все в порядке.

vadim5june 19.08.2012 00:55

Цитата:

Сообщение от Arris
А если мне нужен не href? А title?

попробуйте
alert(this.getAttribute('title'));

Arris 19.08.2012 01:04

Цитата:

Сообщение от vadim5june (Сообщение 198673)
попробуйте
alert(this.getAttribute('title'));

:thanks:
вроде бы работает, но очевидности в этом нет. Сплошная неочевидность. Я понял как работает, но нифига не понял - почему именно так.

Кроме того.. а содержимое ссылки <a> это </a> как получить?

$('a[href*=localhost]').on('mouseover', handlerTest);
и
function handlerTest()
{
$("span#test").html(this);
}
приводит к дивным результатам.

vadim5june 19.08.2012 01:09

Цитата:

Сообщение от Arris
Кроме того.. а содержимое ссылки <a> это </a> как получить?

я думаю так
$("span#test").html($(this).text());

Цитата:

Сообщение от Arris
вроде бы работает, но очевидности в этом нет

можно было через jquery
$(this).attr('title')

Arris 19.08.2012 01:14

Вы правильно думаете :-\

Но блин.. доки такие доки... :-\

Спасибо. Шесть часов бития головой о монитор как обычно бессмысленны оказались. Но хоть полезны :-\


Часовой пояс GMT +3, время: 01:51.