Могу ли я рассказать что-нибудь о гиперссылке, которая была нажата в JavaScript? - PullRequest
0 голосов
/ 01 июня 2009

Если у меня есть такой код:

<script>
function determine()
{
    // ????
}
</script>

<a href="blah1" onclick="determine()">blah1</a>
<a href="blah2" onclick="determine()">blah2</a>

Есть ли способ определить (), чтобы увидеть, какая ссылка была нажата?

(Да, я знаю, простая и правильная вещь - это передать "this" для определения () ... но в этом случае это будет нелегко из-за проблем с унаследованным кодом.)

РЕДАКТИРОВАТЬ: Вероятно, я должен был упомянуть об этом в начале ... наш сайт в настоящее время не использует (и не может использовать, в настоящее время) JQuery ... так что JQuery отвечает (хотя ценно в Вообще для такого типа вопросов) мне на самом деле не поможет.

Ответы [ 6 ]

4 голосов
/ 01 июня 2009

Проверьте эту ссылку из quirksmode. Вы можете получить цель мероприятия.

function doSomething(e) {
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;
}
2 голосов
/ 01 июня 2009

Вы можете использовать JavaScript, но я предпочитаю использовать что-то вроде jQuery:

<a href="blah1">blah1</a>

<script type="text/javascript">
  $('a[href=blah1]').click(function() {
    var link = $(this); // here's your link.
    return false; // acts like the link was not clicked. return true to carry out the click.
  });
</script>

Если вы используете функциональность $().click(), $(this) даст вам ссылку.

1 голос
/ 01 июня 2009

Если вы не можете изменить onclick = "define ()" в своем HTML, но вы можете изменить функцию define (), то я думаю, что вам лучше всего:

Оставьте функцию define () пустой, чтобы она ничего не делала.

Используйте javascript (как описано в других ответах), чтобы добавить реальный обработчик кликов к каждой ссылке, и используйте событие, чтобы определить, по какой ссылке щелкнули, и затем выполнить нужный код.

0 голосов
/ 02 июня 2009

Если вы не можете изменить атрибут onclick, исправьте его с помощью JavaScript:

// use a DOMContentLoaded hack or `onload` as fallback
onload = function() {
    var links = document.links;
    for(var i = 0; i < links.length; ++i) {
        // there might be a better way to check which links to modify
        // don't know without further details
        if(/determine\(\)/.test(links[i].onclick))
            links[i].onclick = determine;
    }
};

function determine() {
    // the link is now available as `this`
    alert(this.href);
}

Возможно, еще лучшим решением было бы установить глобальный объект в стиле IE event для браузеров, соответствующих стандартам:

if(document.addEventListener) {
    document.addEventListener('click', function(e) {
        window.event = e;
    }, true);
}

function determine() {
    var src = event.target || event.srcElement;
    alert(src.href);
}
0 голосов
/ 01 июня 2009

Другое решение:

Добавить обработчик onclick к документу. Когда пользователь щелкает ссылку, событие щелчка «всплывет» до окна, и у вас будет доступ к событию, чтобы определить, какая ссылка была нажата.

Это может быть полезно, если вы хотите, чтобы код запускался только для тех ссылок, которые уже имеют onclick = "define ()" - вы можете установить функцию define () для установки переменной. Затем, когда пользователь щелкает ссылку, запускается функция define () для установки переменной, а когда запускается обработчик щелчка документа, вы можете проверить переменную - тогда вы узнаете, что ссылка имела onclick = "define ()". 1005 *

Дайте мне знать, если я смогу сделать это немного сложнее для вас ...: -)

0 голосов
/ 01 июня 2009

Вы можете добавить события к каждой ссылке, например,

links = document.getElementsByTagName('a');

for (link in links) {

   link.onclick = function() {
      alert(this.id);
      determine(); // or some other important code?
   }

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