2011-08-14 8 views
9

javascript関数(カウントダウンを持つタイマー)から値を取得する入力テキストがあります。変更が別の関数から来たときにonchangeイベントが発生しない

入力テキストが0のときにイベントを発生させたいので、change eventListenerを使用しています。

残念ながら、JavaScript機能から変更が来た場合は、イベントを発生させていないようです。

変更イベントが強制的に働くようにするにはどうしたらいいですか?変更はJavaScriptであり、ユーザーからのものではありません。任意のヘルプ値を変更する機能で

答えて

13

変化
コントロールが入力フォーカスを失って、その値がフォーカスを得て以来、変更されたときに変更イベントが発生します。このイベントは、INPUT、SELECT、およびTEXTAREAに有効です。素子。

コードでテキスト入力の値を変更すると、フォーカスが変更されないため、変更イベントは発生しません。あなたは、例えば、createEventdispatchEventにかかわらず、イベントを自分でトリガすることができます。

el = document.getElementById('x'); 
ev = document.createEvent('Event'); 
ev.initEvent('change', true, false); 
el.dispatchEvent(ev); 

そしてライブバージョン:http://jsfiddle.net/ambiguous/nH8CH/

+2

最新のイベントリスニングメソッドを使用している場合、これは機能しません。古い 'onchange'プロパティを使用する場合にのみ機能します。 DOMイベントAPIを使用してイベントを発生させる必要があります。 –

+0

@Delan:JavaScriptを長時間使用していないことが分かりますか?私はそれにパッチを当てます。 –

+0

ありがとう!これはとてもシンプルで優れた作業です! :) – marverix

3

ため

おかげで、手動でchangeイベントを発生します。 fine manualから

var e = document.createEvent('HTMLEvents'); 
e.initEvent('change', false, false); 
some_input_element.dispatchEvent(e); 
+0

それは 'HTMLEventsする必要がないの'? jQueryのバージョンでは明らかに 'Event'が使用されていますが、唯一の違いはDOMレベル2とレベル3です。 –

+0

私が知る限り、' HTMLEvents'、 'Event'と' Events'は同義です。 –

+0

['Event'](http://www.w3.org/TR/DOM-Level-3-Events/#events-Event)が公式なようですが、' Events'はおそらく一部のブラウザでは一致するでしょう'hasFeature'を複数形にします。 –

1

より再利用可能なオプション:

function simulate_event(eventName, element) { 
    // You could set this into the prototype as a method. 
    var event; 

    if (document.createEvent) { 
     event = document.createEvent("HTMLEvents"); 
     event.initEvent(eventName, true, true); 
    } else { 
     event = document.createEventObject(); 
     event.eventType = eventName; 
    }; 

    event.eventName = eventName; 

    if (document.createEvent) { 
     element.dispatchEvent(event); 
    } else { 
     element.fireEvent("on" + event.eventName, event); 
    } 
}; 
関連する問題