2015-10-22 2 views
1

Мне нужно вызвать операцию щелчка в собственном javascript. Я получил следующий элемент:Исходный javascript нажмите на элемент dom

<svg class="pull-right svg-cross ng-isolate-scope" xmlns="http://www.w3.org/2000/svg" data-svg-icon="" icon="cross" ng-click="dismissBanner()"> 
    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#svg-cross"></use> 
</svg> 

Я, кажется, сайт, который использует угловые. Я бы хотел щелкнуть по элементу таким образом, чтобы функция dismissBanner() получила правильное название. Поэтому я попытался следующие:

document.getElementsByClassName('pull-right svg-cross ng-isolate-scope')[0].click(); 

и

document.getElementsByClassName('pull-right svg-cross ng-isolate-scope')[0].onclick(); 

Однако обе попытки не увенчались успехом. Я получаю ошибку Uncaught TypeError: document.getElementsByClassName(...)[0].onclick is not a function(…).

Я также называется функцией dismissBanner(); непосредственно, однако, я получаю ошибку: Uncaught ReferenceError: dismissBanner is not defined(…)

Как я должен сделать это правильно?

ответ

2

Похоже, это рабочий подход:

angular.element('.svg-cross').trigger('click'); 

Источник: How to trigger ng-click [AngularJS] programmatically

Поговорив с OP, мы обнаружили, что версия Угловая используется 1.3.17. Для этой версии правильный подход для запуска щелчка:

var el = document.getElementsByClassName('pull-right svg-cross ng-isolate-scope')[0]; 
angular.element(el).triggerHandler('click'); 
+0

Хм, я получаю следующее сообщение об ошибке, при вызове эта: 'неперехваченной Ошибки: [jqLite: nosel] HTTP://errors.angularjs.org/1.3.17/jqLite/nosel (...) ' – toom

+0

@toom Я просто обновил ответ, включив только одно имя класса, а также изменив' triggerHandler' на 'trigger'. Не могли бы вы попробовать еще раз? –

+0

Я попробовал ваше новое предложение. К сожалению, это вызывает ошибку. – toom

1

Вы можете эмулировать щелчок, отправив событие элементу. Для этого есть объект (Event), но конструктор не поддерживается в IE. Вы можете преодолеть это с уходящим API (document.createEvent):

function mock() { 
 
    var evt; 
 
    try { 
 
    evt = new Event('click'); 
 
    } 
 
    catch(e) { 
 
    evt = document.createEvent('MouseEvents'); 
 
    evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
 
    } 
 

 
    document.getElementById('trgt').dispatchEvent(evt); 
 
}
<div id="trgt" onclick="alert('clicked!')">Don't click me</div> 
 
<div onclick="mock()">Click me!</div>

Смежные вопросы