#4508 Adding simple test and actually getting the event to dispatch

This commit is contained in:
Matt McCoy 2015-03-17 19:54:05 -04:00
parent 5938a4c0f5
commit 0bd717e470
3 changed files with 21 additions and 6 deletions

View file

@ -629,7 +629,7 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
ctrl, alt, shift, meta, ctrl, alt, shift, meta,
None, props.key_code).root(); None, props.key_code).root();
let event = EventCast::from_ref(keyevent.r()); let event = EventCast::from_ref(keyevent.r());
let _ = target.DispatchEvent(event); event.fire(target);
let mut prevented = event.DefaultPrevented(); let mut prevented = event.DefaultPrevented();
// https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#keys-cancelable-keys // https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html#keys-cancelable-keys
@ -642,7 +642,7 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
ctrl, alt, shift, meta, ctrl, alt, shift, meta,
props.char_code, 0).root(); props.char_code, 0).root();
let ev = EventCast::from_ref(event.r()); let ev = EventCast::from_ref(event.r());
let _ = target.DispatchEvent(ev); ev.fire(target);
prevented = ev.DefaultPrevented(); prevented = ev.DefaultPrevented();
// TODO: if keypress event is canceled, prevent firing input events // TODO: if keypress event is canceled, prevent firing input events
} }

View file

@ -13,7 +13,7 @@ use dom::bindings::codegen::InheritTypes::{ElementCast, EventTargetCast, HTMLEle
use dom::bindings::codegen::InheritTypes::{HTMLTextAreaElementDerived, HTMLFieldSetElementDerived}; use dom::bindings::codegen::InheritTypes::{HTMLTextAreaElementDerived, HTMLFieldSetElementDerived};
use dom::bindings::codegen::InheritTypes::{KeyboardEventCast, TextDerived}; use dom::bindings::codegen::InheritTypes::{KeyboardEventCast, TextDerived};
use dom::bindings::global::GlobalRef; use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, JSRef, LayoutJS, Temporary, OptionalRootable}; use dom::bindings::js::{JSRef, LayoutJS, Temporary, OptionalRootable};
use dom::bindings::refcounted::Trusted; use dom::bindings::refcounted::Trusted;
use dom::document::{Document, DocumentHelpers}; use dom::document::{Document, DocumentHelpers};
use dom::element::{Element, AttributeHandlers}; use dom::element::{Element, AttributeHandlers};
@ -347,7 +347,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLTextAreaElement> {
KeyReaction::DispatchInput => { KeyReaction::DispatchInput => {
self.value_changed.set(true); self.value_changed.set(true);
if event.IsTrusted() == true { if event.IsTrusted() {
let window = window_from_node(*self).root(); let window = window_from_node(*self).root();
let window = window.r(); let window = window.r();
let chan = window.script_chan(); let chan = window.script_chan();
@ -355,7 +355,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLTextAreaElement> {
let dispatcher = ChangeEventRunnable { let dispatcher = ChangeEventRunnable {
element: handler, element: handler,
}; };
chan.send(ScriptMsg::RunnableMsg(box dispatcher)); let _ = chan.send(ScriptMsg::RunnableMsg(box dispatcher));
} }
self.force_relayout(); self.force_relayout();
@ -382,4 +382,4 @@ impl Runnable for ChangeEventRunnable {
let target = self.element.to_temporary().root(); let target = self.element.to_temporary().root();
target.r().dispatch_change_event(); target.r().dispatch_change_event();
} }
} }

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<textarea id="textarea">
</textarea>
</body>
<script>
var area = document.getElementById('textarea');
area.addEventListener('input', function() {
alert('input detected');
});
</script>
</html>