प्रोग्रामेटिक रूप से एनग्लिक कैसे ट्रिगर करें


101

मैं ng-clickरनटाइम पर एक तत्व को ट्रिगर करना चाहता हूं जैसे:

_ele.click();

या

_ele.trigger('click', function());

यह कैसे किया जा सकता है?


4
नहीं, मैं उस तंत्र को जानना चाहता हूं जिसके द्वारा मैं मैन्युअल रूप से एनजी-क्लिक को ट्रिगर कर सकता हूं।
— mulla.azzi

जवाबों:


182

वाक्य रचना निम्नलिखित है:

function clickOnUpload() {
  $timeout(function() {
    angular.element('#myselector').triggerHandler('click');
  });
};

// Using Angular Extend
angular.extend($scope, {
  clickOnUpload: clickOnUpload
});

// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;

कोणीय विस्तार पर अधिक जानकारी यहाँ रास्ता ।

यदि आप कोणीय के पुराने संस्करणों का उपयोग कर रहे हैं , तो आपको ट्रिगरहैंडलर के बजाय ट्रिगर का उपयोग करना चाहिए ।

यदि आपको स्टॉप प्रचार लागू करने की आवश्यकता है, तो आप इस विधि का उपयोग इस प्रकार कर सकते हैं:

<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
  Something
</a>

4
आप कोणीय के किस संस्करण का उपयोग कर रहे हैं। ट्रिगरहैंडर 1.2.1 में ठीक काम करता है: jsfiddle.net/t34z7
— Blago

13
कृपया समझाएं कि $ (elem) .click () कोणीय के साथ काम क्यों नहीं करता है?
— सर्गई शेवचेक

11
यदि आप jqLite तक सीमित हैं और चयनकर्ता का उपयोग नहीं कर सकते हैं, तो इसके बजाय करें: angular.element (document.querySelector ('# mySelector'))। ट्रिगर ('क्लिक');
— डैनियल नलबाच

3
@DanielNalbach वर्तमान में (और इतना चालू नहीं) कोणीय संस्करण 1.2+, आपको triggerHandlerइसके बजाय का उपयोग करना होगाtrigger
— yorch

1
मुझे यकीन नहीं है कि यह अभी भी काम करता है ... angularjs 1.6 ऐसा लगता है कि यह पूरी तरह से काम नहीं कर रहा है
— जॉर्ज माउर

83
angular.element(domElement).triggerHandler('click');

संपादित करें: ऐसा प्रतीत होता है कि आपको वर्तमान $ लागू () चक्र से बाहर निकलना होगा। ऐसा करने का एक तरीका $ टाइमआउट () है:

$timeout(function() {
    angular.element(domElement).triggerHandler('click');
}, 0);

फिडल देखें: http://jsfiddle.net/t34z7/


2
यहां तक ​​कि यह न तो काम कर रहा है, न ही इसकी त्रुटि के बाद इसका थ्रोइंग एरर: [$ rootScope: inprog] error.angularjs.org/1.2.14/$rootScope/inprog?p0=%24apply for Error (देशी)
— mulla.azzi

8
आप शायद $timeoutइसके बजाय कोणीय का उपयोग करना चाहते हैं setTimeout, यदि आवश्यक हो तो आपके लिए $timeoutएक $applyचक्र चलाएगा । यह आपके कोड को और अधिक परीक्षण योग्य बनाता है क्योंकि ngMock आपको पूर्ण नियंत्रण देता है जब $timeouts निष्पादित होते हैं। docs.angularjs.org/api/ng/service/$timeout
— WildlyInaccurate

2
वास्तव में यह होना चाहिए $timeout(fn, 0, false);ताकि यह $ लागू न हो, न हो?
— मार्टिन प्रोब्स्ट

2
यह स्वीकृत उत्तर होना चाहिए। ट्रिगरहैंडलर काम करता है। ट्रिगर v1.2.25 में नहीं है
— होवी

4
@deadManN $timeoutएक सेवा है और इससे पहले कि आप इसे docs.angularjs.org/api/ng/service/$timeout
— WildlyInaccurate

19

यह समाधान मेरे लिए काम करता है:

angular.element(document.querySelector('#myselector')).click();

के बजाय :

angular.element('#myselector').triggerHandler('click');

@DotKu शायद आप पहले से ही एक $ स्कोप फ़ंक्शन में हैं जैसे आप $ टाइमआउट फ़ंक्शन में उपयोग करते हैं? दूसरे शब्दों में, आप $ स्कोप को नहीं बुला सकते। $ स्कोप में $ लागू ()। $ लागू करें () ... मुझे आशा है कि यह आपकी मदद कर सकता है।
— jpmottin

@jpmottin मुझे यह मिला, इसे $ टाइमआउट में रखा जाना चाहिए। धन्यवाद
— Weijing जे लिन

1
OMG, कोणीय टोटल ने इसे बर्बाद कर दिया। वे jQuery के$('#element').click()
— Jhourlad Estrella

13

बस अगर हर कोई इसे देखता है, तो मैंने एक महत्वपूर्ण लाइन के साथ अतिरिक्त डुप्लिकेटिंग उत्तर जोड़ा, जो घटना के प्रसार को नहीं तोड़ देगा

$scope.clickOnUpload = function ($event) {    
    $event.stopPropagation(); // <-- this is important

    $timeout(function() {
        angular.element(domElement).trigger('click');
    }, 0);
};

धन्यवाद! यह अंत में मेरे लिए 1.5.11 में काम किया, और पूरी तरह से jquery निर्भरता। $ टाइमआउट (फ़ंक्शन () {var el = document.getElementsByClassName ('fa-chevron-up'); angular.element (el) .trigger ('click');}; 0);
— फ्लोरिडा जी।

9

सादे पुराने जावास्क्रिप्ट का उपयोग मेरे लिए काम किया:
document.querySelector('#elementName').click();


हाँ। मेरे लिये कार्य करता है। धन्यवाद।
— कटारो

5

उपयोग करने के लिए सबसे अच्छा समाधान है:

domElement.click()

क्योंकि कोणीयज ट्रिगरहैंडलर ( angular.element(domElement).triggerHandler('click')) क्लिक की घटनाओं डोम पदानुक्रम में बबल नहीं करता है, लेकिन ऊपर वाला करता है - एक सामान्य माउस क्लिक की तरह।

https://docs.angularjs.org/api/ng/function/angular.element

http://api.jquery.com/triggerhandler/

https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/click


4

आप पसंद कर सकते हैं

$timeout(function() {
   angular.element('#btn2').triggerHandler('click');
});

मुझे अपने एनजी 1.5.3 ऐप में इस समाधान के लिए यह त्रुटि मिलती है: चयनकर्ताओं के माध्यम से तत्वों को देखना jqLite द्वारा समर्थित नहीं है।
— टोड हेल

1

सरल नमूना:

एचटीएमएल

<div id='player'>
    <div id="my-button" ng-click="someFuntion()">Someone</div>
</div>

जावास्क्रिप्ट

$timeout(function() {
    angular.element('#my-button').triggerHandler('click');
}, 0);

यह क्या करता है बटन के लिए देखो idऔर एक क्लिक कार्रवाई करते हैं। देखा।

स्रोत: https://techiedan.com/angularjs-how-to-trigger-click/


0

यह कोड काम नहीं करेगा (क्लिक करने पर कोई त्रुटि फेंकें):

$timeout(function() {
   angular.element('#btn2').triggerHandler('click');
});

आपको निम्न के रूप में querySelector का उपयोग करने की आवश्यकता है:

$timeout(function() {
   angular.element(document.querySelector('#btn2')).triggerHandler('click');
});

0

अपनी विधि में निम्नलिखित पंक्ति शामिल करें, जहाँ आप क्लिक इवेंट को ट्रिगर करना चाहते हैं

angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.