javascript вызов click() на <a>

Discussion in 'PHP' started by Дикс, 20 Mar 2013.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    <a href='http://google.ru' id='rmrf'>test</a>

    <script>
    document.getElementById('rmrf').click();
    </script>

    Нагуглил что стандарт js не допускает вызова click() на теге <a>
    При этом этот код отлично работает в Опере и ФФ, но не работает в webkit, где он мне и нужен.

    Реально ли как-то вызвать клик в вебките?
    Причем проблема не решается простым извлечением href и переходом на него. На ссылку навешана туева хуча внешних обработчиков да и сама она похоже рисуется яваскриптом.
     
  2. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Ну так глянь, что у него в onClick, выполни код.

    У jQuery ведь есть функция click()
    Можно её распотрошить или её же и использовать. Только учитывая, что это будет всё же эмуляция клика (например, если там есть сплывающие окна в функции-обработчике, то они заблокированы браузером будут).
     
  3. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    onclick() у него нет
    jquery.click() тоже не работает

    PHP:
    <a aria-controls="js_2" aria-owns="u_0_u" class="uiPopoverButton _p uiButton uiButtonSuppressed uiButtonNoText" href="#" role="button" aria-haspopup="true" aria-expanded="true" rel="toggle" id="u_0_10">

    <
    class="mrs img sp_7jhjgj sx_e63a5e"></i>
    <
    span class="uiButtonText"></span></a>
     
    #3 Дикс, 20 Mar 2013
    Last edited: 20 Mar 2013
  4. ol1ver

    ol1ver Active Member

    Joined:
    22 Jul 2011
    Messages:
    237
    Likes Received:
    155
    Reputations:
    0
    Используй jquery, через голый js cложно думаю тебе будет. След. вопрос будет как поймать объект :) а вообще лучше написать что хочешь сделать
     
  5. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Выведи куда-нибудь результат от

    Code:
    document.getElementById('u_0_10').onClick
    
     
  6. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    >>document.getElementById('u_0_10').onClick

    undefined

    $().click() - не выдает ни ошибок, ни результата
     
  7. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Сорри, не onClick, а onclick

    Code:
    alert(document.getElementById('u_0_10').onclick);
    
    Если undefined - значит обработчик не задан, ищи у дочерних элементов.
     
  8. TOP4

    TOP4 Banned

    Joined:
    19 Dec 2010
    Messages:
    23
    Likes Received:
    4
    Reputations:
    1
    на jQuery всё должно работать.

    $('#rmrf').click( function {
    alert('test');
    return false;
    });
     
  9. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    найдено 2 решения:

    // вставляем в ссылку кнопку и жмем на неё
    butt = document.createElement('button')
    butt.id = 'BUTT'
    document.getElementById('LINK').appendChild(butt)
    butt.click()


    // создаем Event и вешаем на ссылку
    var evObj = document.createEvent('Events');
    evObj.initEvent('click', true, false);
    document.getElementById('LINK').dispatchEvent(evObj);


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

    А вот первый костыль, придуманный мной, работает отлично.

    И ещё раз повторюсь - jquery абсолютно ничего не решает.
    Тег <a> не поддерживает .click() и webkit тоже, несмотря на то что Опера, ФФ, Хром и тп - поддерживают.
     
  10. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Code:
    var elem = document.getElementById('test');	
    elem.onclick = function()
    {
    	alert('onclick');
    	return false;
    }
    
    (eval(elem.onclick));
    
    А в теле html
    Code:
    <a href="http://test.ru" id="test">test</a>
    
     
  11. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    html не мой, я не могу его менять
     
  12. FindeR

    FindeR Elder - Старейшина

    Joined:
    15 Nov 2006
    Messages:
    623
    Likes Received:
    138
    Reputations:
    20
    Я и не предлагаю код мофидицировать, я пример показывал.

    Смотришь, что в onclick у элемента, выполяешь это через eval() - вот и эмуляция готова.
    И никакой разницы, каков тип элемента.
     
    #12 FindeR, 20 Mar 2013
    Last edited: 20 Mar 2013
  13. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    PHP:
    // input CSS-selector for button/a/input-submit, click this shit, return true/false
    function anchor_click(selector)
    {

        
    link document.querySelector(selector);
        if (
    link === false)
            return 
    false;

        if (
    document.createEvent) {
            var 
    event document.createEvent("MouseEvents");
            
    event.initMouseEvent("click"truetruewindow,
                
    00000,
                
    falsefalsefalsefalse,
                
    0null);
            
    link.dispatchEvent(event);
        }
        else if (
    link.fireEvent) {
           
    link.fireEvent("onclick");
        }
    };
    финальное решение
    жмет на все и всегда, находит элемент по css-селектору

    например:

    anchor_click('#button')
     
  14. scanislav

    scanislav Elder - Старейшина

    Joined:
    25 Jun 2010
    Messages:
    87
    Likes Received:
    22
    Reputations:
    31
    Специом проверил, точно работает в Хроме (Mac), Safari и FF:

    HTML:
    <body>
    <a id="Link" href="http://www.google.com" onclick="alert(1)">CLICKME</a>
    
    </body>
    <script>
    document.getElementById("Link").click();
    </script>