답변:
만들기 Event개체를하고에 전달 dispatchEvent요소의 방법 :
var element = document.getElementById('just_an_example');
var event = new Event('change');
element.dispatchEvent(event);
이렇게하면 addEventListener메서드 를 호출 하거나 onchange요소 의 속성을 설정하여 등록되었는지 여부에 관계없이 이벤트 리스너가 트리거됩니다 .
이벤트를 버블 링하려면 Event생성자에 두 번째 인수를 전달해야합니다 .
var event = new Event('change', { bubbles: true });
브라우저 호환성에 대한 정보 :
var evt = document.createEvent('CustomEvent'); evt.initCustomEvent('input', true, false, { }); elem.dispatchEvent(evt);
jQuery에서는 주로 다음을 사용합니다.
$("#element").trigger("change");
ugh eval을 아무것도 사용하지 마십시오 . 글쎄요, 몇 가지가 있지만 매우 드뭅니다. 대신 다음을 수행합니다.
document.getElementById("test").onchange()
더 많은 옵션을 보려면 여기를 참조하십시오. http://jehiah.cz/archive/firing-javascript-events-properly
Element.addEventListener이벤트를 처리 하는 데 사용 된 경우 작동하지 않습니다 . 현대적인 방법으로 달성하려면 @Miscreant의 답변을 참조하십시오.
어떤 이유로 ele.onchange ()가 내 페이지의 IE에서 "메서드를 찾을 수 없음"을 던지고 있으므로 Kolten이 제공 한 링크에서이 함수를 사용 하고 fireEvent (ele, 'change')를 호출했습니다. :
function fireEvent(element,event){
if (document.createEventObject){
// dispatch for IE
var evt = document.createEventObject();
return element.fireEvent('on'+event,evt)
}
else{
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true ); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}
그러나 나는 onchange ()가 작동 해야하는지 확인하는 테스트 페이지를 만들었습니다.
<input id="test1" name="test1" value="Hello" onchange="alert(this.value);"/>
<input type="button" onclick="document.getElementById('test1').onchange();" value="Say Hello"/>
편집 : ele.onchange ()가 작동하지 않는 이유는 실제로 onchange 이벤트에 대해 아무것도 선언하지 않았기 때문입니다. 그러나 fireEvent는 여전히 작동합니다.
element.dispatchEvent(new Event('change', true, true))대신에있어서 신비로운 주로 사용되지 않는 모든의 createEvent와 initEvent물건.
function triggerEvent( elem, type, event ) {
if ( $.browser.mozilla || $.browser.opera ) {
event = document.createEvent("MouseEvents");
event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
elem.dispatchEvent( event );
} else if ( $.browser.msie ) {
elem.fireEvent("on"+type);
}
}
물론 $ .browser 항목을 사용자 고유의 브라우저 감지 방법으로 대체하여 jQuery를 독립적으로 만들 수 있습니다.
이 기능을 사용하려면 :
var event;
triggerEvent(ele, "change", event);
이것은 기본적으로 무언가가 실제로 변경된 것처럼 실제 DOM 이벤트를 발생시킵니다.
이 코드 스 니펫으로 모든 이벤트를 추가하는 경우 :
//put this somewhere in your JavaScript:
HTMLElement.prototype.addEvent = function(event, callback){
if(!this.events)this.events = {};
if(!this.events[event]){
this.events[event] = [];
var element = this;
this['on'+event] = function(e){
var events = element.events[event];
for(var i=0;i<events.length;i++){
events[i](e||event);
}
}
}
this.events[event].push(callback);
}
//use like this:
element.addEvent('change', function(e){...});
그런 다음 이벤트 이름이 element.on<EVENTNAME>()어디에 있는지 사용할 수 있습니다. 그러면 <EVENTNAME>모든 이벤트가<EVENTNAME>
Javascript에서 이벤트를 트리거합니다.
document.getElementById("yourid").addEventListener("change", function({
//your code here
})
jQuery를 사용하는 경우 다음이 필요합니다.
$('#elementId').change(function() { alert('Do Stuff'); });
또는 MS AJAX :
$addHandler($get('elementId'), 'change', function(){ alert('Do Stuff'); });
또는 요소의 원시 HTML에서 :
<input type="text" onchange="alert('Do Stuff');" id="myElement" />
질문을 다시 읽은 후해야 할 일을 잘못 읽은 것 같습니다. 변경 이벤트를 강제하는 방식으로 DOM 요소를 업데이트하는 방법을 찾지 못했습니다. 다음과 같이 별도의 이벤트 처리기 메서드를 사용하는 것이 가장 좋습니다.
$addHandler($get('elementId'), 'change', elementChanged);
function elementChanged(){
alert('Do Stuff!');
}
function editElement(){
var el = $get('elementId');
el.value = 'something new';
elementChanged();
}
변경을 수행 할 JavaScript 메소드를 이미 작성 중이므로 호출 할 추가 행이 1 개뿐입니다.
당신이 경우 또는, 있다 은 Microsoft AJAX 프레임 워크를 사용하여 모든 이벤트 핸들러를 통해 액세스 할 수 있습니다 :
$get('elementId')._events
발동 할 올바른 이벤트 핸들러를 찾기 위해 반사 스타일의 작업을 수행 할 수 있습니다.
JQuery를 사용하여 다음을 수행 할 수 있습니다.
// for the element which uses ID
$("#id").trigger("change");
// for the element which uses class name
$(".class_name").trigger("change");