ฉันต้องการทริกเกอร์ng-click
องค์ประกอบที่รันไทม์เช่น:
_ele.click();
หรือ
_ele.trigger('click', function());
จะทำได้อย่างไร?
ฉันต้องการทริกเกอร์ng-click
องค์ประกอบที่รันไทม์เช่น:
_ele.click();
หรือ
_ele.trigger('click', function());
จะทำได้อย่างไร?
คำตอบ:
ไวยากรณ์มีดังต่อไปนี้:
function clickOnUpload() {
$timeout(function() {
angular.element('#myselector').triggerHandler('click');
});
};
// Using Angular Extend
angular.extend($scope, {
clickOnUpload: clickOnUpload
});
// OR Using scope directly
$scope.clickOnUpload = clickOnUpload;
ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการขยายเชิงมุมที่นี่
หากคุณกำลังใช้รุ่นเก่าของเชิงมุมคุณควรใช้ทริกเกอร์แทนtriggerHandler
หากคุณต้องการใช้การหยุดการแพร่กระจายคุณสามารถใช้วิธีนี้ได้ดังนี้:
<a id="myselector" ng-click="clickOnUpload(); $event.stopPropagation();">
Something
</a>
triggerHandler
แทนtrigger
angular.element(domElement).triggerHandler('click');
แก้ไข: ดูเหมือนว่าคุณต้องแยกออกจากวงจร $ apply () ปัจจุบัน วิธีหนึ่งที่ทำได้คือใช้ $ timeout ():
$timeout(function() {
angular.element(domElement).triggerHandler('click');
}, 0);
$timeout
มากกว่าsetTimeout
เนื่องจาก$timeout
จะเรียกใช้$apply
วงจรให้คุณหากจำเป็น นอกจากนี้ยังทำให้โค้ดของคุณสามารถทดสอบได้มากขึ้นเนื่องจาก ngMock ช่วยให้คุณควบคุมได้เต็มที่ว่า$timeout
จะดำเนินการเมื่อใด docs.angularjs.org/api/ng/service/$timeout
$timeout(fn, 0, false);
ไม่เรียกใช้ $ ใช่ไหม
$timeout
เป็นบริการและด้วยเหตุนี้จึงจำเป็นต้องมีการฉีดพึ่งพาก่อนจึงจะใช้งานได้docs.angularjs.org/api/ng/service/$timeout
วิธีแก้ปัญหาต่อไปนี้ใช้ได้กับฉัน:
angular.element(document.querySelector('#myselector')).click();
แทน :
angular.element('#myselector').triggerHandler('click');
$('#element').click()
ในกรณีที่ทุกคนเห็นฉันได้เพิ่มคำตอบที่ซ้ำกันเพิ่มเติมด้วยบรรทัดสำคัญซึ่งจะไม่ทำลายการเผยแพร่เหตุการณ์
$scope.clickOnUpload = function ($event) {
$event.stopPropagation(); // <-- this is important
$timeout(function() {
angular.element(domElement).trigger('click');
}, 0);
};
การใช้ JavaScript แบบเก่าธรรมดาสำหรับฉัน:
document.querySelector('#elementName').click();
ทางออกที่ดีที่สุดคือใช้:
domElement.click()
เนื่องจากangular.element(domElement).triggerHandler('click')
เหตุการณ์การคลิกangularjs triggerHandler ( ) ไม่ปรากฏขึ้นในลำดับชั้นของ DOM แต่เหตุการณ์ข้างต้นทำเช่นเดียวกับการคลิกเมาส์ปกติ
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
คุณสามารถทำเช่น
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
ตัวอย่างง่ายๆ:
HTML
<div id='player'>
<div id="my-button" ng-click="someFuntion()">Someone</div>
</div>
JavaScript
$timeout(function() {
angular.element('#my-button').triggerHandler('click');
}, 0);
สิ่งนี้คือการมองหาปุ่มid
และดำเนินการคลิก Voila
ที่มา: https://techiedan.com/angularjs-how-to-trigger-click/
รหัสนี้จะไม่ทำงาน (เกิดข้อผิดพลาดเมื่อคลิก):
$timeout(function() {
angular.element('#btn2').triggerHandler('click');
});
คุณต้องใช้querySelectorดังนี้:
$timeout(function() {
angular.element(document.querySelector('#btn2')).triggerHandler('click');
});
รวมบรรทัดต่อไปนี้ไว้ในวิธีการของคุณที่คุณต้องการทริกเกอร์เหตุการณ์คลิก
angular.element('#btn_you_want_to_click_progmaticallt').triggerHandler('click');
});