ссылка (это) в функции - PullRequest
3 голосов
/ 12 мая 2010

У меня есть элементы, генерируемые динамическим html, я хотел бы сослаться на конкретный href, который вызывает функцию, когда один из многих может вызывать ее.

<a href="javascript:Foo(this)">Link</a>

Не работает, когда я пытаюсь сослаться на $ (это). Есть ли другой способ сделать это или мне нужно сделать динамические идентификаторы?

Ответы [ 3 ]

5 голосов
/ 12 мая 2010

<a href="javascript:Foo(this.href)">Link</a> будет работать, если вы хотите передать href.

Однако обработчики чего-то в html-коде вовсе не являются jqueryish. Дайте вашим ссылкам класс и настройте живой обработчик:

$('.mylink').live('click', function() {
    // do whatever you want with this or $(this) or this.href or $(this).attr('href')
});
1 голос
/ 12 мая 2010

помещать части js в атрибут href - плохая идея. Лучше всего добавлять обработчик с addEventListener, но здесь вы можете обойтись без установки onclick напрямую.

<a href="#" onclick="Foo(event);">Link</a>

и ваша функция будет выглядеть как

function Foo(e) {

    var a = e.target || e.srcElement;

    // TODO: stuff

    if (e.preventDefault) {
        e.preventDefault();
    }
    else {
        return false;
    }
}

поэтому, когда вы нажимаете на ссылку, Foo вызывается с событием в качестве параметра. объект события имеет ссылку на элемент источника, например target в стандартных браузерах или srcElement в IE. комбо preventDefault / return false; в конце не позволяет браузеру «перейти» по ссылке на #.

edit: если подумать, поскольку у вас много ссылок, при использовании jquery для добавления обработчиков рекомендуемый способ, вероятно, лучше (хотя первое решение все еще хорошо).

...
<a id="A5" href="#" >Link</a>
<a id="A6" href="#" >Link</a>
<a id="A7" href="#" >Link</a>
...

<script>
$('a').click(Foo);
</script>
0 голосов
/ 12 мая 2010

Нет смысла использовать обработчик псевдопротоколов javascript:.
Вместо этого используйте

<a href="#" onclick="Foo(this);">Link</a>

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...