diff options
author | Zhen Zhang <izgzhen@gmail.com> | 2016-07-03 19:41:26 +0800 |
---|---|---|
committer | Zhen Zhang <izgzhen@gmail.com> | 2016-07-03 23:21:45 +0800 |
commit | 411b1b5ffabf822d30978b80bf6f0d916e933aa1 (patch) | |
tree | 7af357e83eab4874f9141a73ce31ed89a9161aed /components/script/dom | |
parent | a77cc9950fb13ccd674a10e46c2327bfa0735dab (diff) | |
download | servo-411b1b5ffabf822d30978b80bf6f0d916e933aa1.tar.gz servo-411b1b5ffabf822d30978b80bf6f0d916e933aa1.zip |
Emit change event when files are selected
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/htmlinputelement.rs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index 6c3b008bfc8..4b2ff4013b4 100644 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -1150,6 +1150,7 @@ impl Activatable for HTMLInputElement { EventCancelable::NotCancelable); }, InputType::InputFile => { + // https://html.spec.whatwg.org/multipage/#file-upload-state-(type=file) let window = window_from_node(self); let filemanager = window.resource_threads().sender(); @@ -1157,6 +1158,7 @@ impl Activatable for HTMLInputElement { let mut error = None; let filter = filter_from_accept(&self.Accept()); + let target = self.upcast::<EventTarget>(); if self.Multiple() { let (chan, recv) = ipc::channel().expect("Error initializing channel"); @@ -1168,6 +1170,13 @@ impl Activatable for HTMLInputElement { for selected in selected_files { files.push(File::new_from_selected(window.r(), selected)); } + + target.fire_event("input", + EventBubbles::Bubbles, + EventCancelable::NotCancelable); + target.fire_event("change", + EventBubbles::Bubbles, + EventCancelable::NotCancelable); }, Err(err) => error = Some(err), }; @@ -1177,7 +1186,16 @@ impl Activatable for HTMLInputElement { let _ = filemanager.send(msg).unwrap(); match recv.recv().expect("IpcSender side error") { - Ok(selected) => files.push(File::new_from_selected(window.r(), selected)), + Ok(selected) => { + files.push(File::new_from_selected(window.r(), selected)); + + target.fire_event("input", + EventBubbles::Bubbles, + EventCancelable::NotCancelable); + target.fire_event("change", + EventBubbles::Bubbles, + EventCancelable::NotCancelable); + }, Err(err) => error = Some(err), }; } |