За последние 24 часа нас посетили 17606 программистов и 1668 роботов. Сейчас ищет 1601 программист ...

Динамическое назначение метода onclick

Тема в разделе "JavaScript и AJAX", создана пользователем NT Man, 25 окт 2008.

  1. NT Man

    NT Man Активный пользователь

    С нами с:
    19 июн 2008
    Сообщения:
    103
    Симпатии:
    1
    Адрес:
    черт его знает
    Итак, требуется средствами JS трансформировать ссылки
    HTML:
    1. <a href="http://mysite?key=value">link1</a>
    в ссылки
    HTML:
    1. <a href="http://mysite#key=value" onclick="AJAXRequest('','','key=value');">link1</a>
    Для решения поставленной был написан следующий код:
    [js]
    for (i = 0; i < links.length; i ++)
    {
    var tmp = links.href;
    var page_param = tmp.split('?');
    links.onclick="AJAXRequest('','','"+page_param[1]+"');";
    links.href = page_param[0] + "#" + page_param[1];
    }
    [/js]
    Он справляется с своей задачей, но только в Opere.

    Затем был этот код переписан для дальнейшей совместимости:
    [js]
    for (i = 0; i < links.length; i ++)
    {
    var tmp = links.href;
    var page_param = tmp.split('?');
    links.setAttribute("onclick", "AJAXRequest('','','"+page_param[1]+"');");
    links.href = page_param[0] + "#" + page_param[1];
    }
    [/js]
    Теперь работает в Opere и Firefox.

    Для ещё большей совместимости имеем такой вариант:
    [js]
    for (i = 0; i < links.length; i ++)
    {
    var tmp = links.href;
    var page_param = tmp.split('?');
    links.setAttribute("onclick", function() {AJAXRequest('','',page_param[1]);});
    links.href = page_param[0] + "#" + page_param[1];
    }
    [/js]
    Теперь AJAXRequest вызывается во всех браузерах (Opera, Firefox, Internet Exproler), но в качестве параметра на всех ссылках идет, то что было в последней ссылке.

    Прошу помочь написать новый вариант кода, который бы работал во всех упомянутых браузерах.

    А вообще задача сейчас свелась к тому, чтобы в последнем варианте кода для каждой ссылке был свой вариант функции AJAXRequest.
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    [js]links.onclick=function () {
    AJAXRequest('','', page_param[1]);
    }[/js]
    Должно работать везде.

    Еще вариант:

    [js]
    if (navigator.userAgent.indexOf("MSIE") > 0) {
    //Если браузер ИЕ
    links.attachEvent('onclick', "AJAXRequest('','','"+page_param[1]+"');");
    }
    else {
    //Другой браузер
    var event = document.createEvent("MouseEvents");
    links.addEventListener("click", "AJAXRequest('','','"+page_param[1]+"');", false);
    }
    [/js]

    OnClick - это событие = метод объекта, а значит, к нему можно обращаться напрямую (либо через методы событий). "setAttribute" - говорит само за себя.