From fc5cba3ee0aad5acf07886e8899a7eca5c0f4f7a Mon Sep 17 00:00:00 2001 From: David Reese Date: Sun, 12 Feb 2012 13:18:40 -0500 Subject: [PATCH] Add support for HTML input event (aka oninput) on text fields. The input event is like onchange, but on text fields, it is fired as soon as the value of the field changes, not when the field is blurred. It is a more appropriate event than 'keydown' or 'keyup', which behave unpredictably with paste events, held-down keys, etc. Support is a little problematic, but it is supported well by Webkit and Firefox, so it seems useful to add here. --- spec/driver_spec.rb | 3 ++- src/capybara.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/spec/driver_spec.rb b/spec/driver_spec.rb index 8b27c60..d9f8019 100644 --- a/spec/driver_spec.rb +++ b/spec/driver_spec.rb @@ -659,6 +659,7 @@ describe Capybara::Driver::Webkit do element.addEventListener("keydown", recordEvent); element.addEventListener("keypress", recordEvent); element.addEventListener("keyup", recordEvent); + element.addEventListener("input", recordEvent); element.addEventListener("change", recordEvent); element.addEventListener("blur", recordEvent); element.addEventListener("mousedown", recordEvent); @@ -678,7 +679,7 @@ describe Capybara::Driver::Webkit do let(:keyevents) do (%w{focus} + - newtext.length.times.collect { %w{keydown keypress keyup} } + + newtext.length.times.collect { %w{keydown keypress keyup input} } + %w{change blur}).flatten end diff --git a/src/capybara.js b/src/capybara.js index 5854e46..f507a4d 100644 --- a/src/capybara.js +++ b/src/capybara.js @@ -176,6 +176,7 @@ Capybara = { this.trigger(index, "keydown"); this.keypress(index, false, false, false, false, 0, value.charCodeAt(strindex)); this.trigger(index, "keyup"); + this.trigger(index, "input"); } this.trigger(index, "change"); this.trigger(index, "blur");