Bug 1286509 - Range input does not fire ‘change’ event when the range is changed using the keyboard. r=smaug

This commit is contained in:
Stone Shih
2016-08-01 10:47:34 +08:00
parent 27c926c49e
commit 6d79c3eb1d
4 changed files with 82 additions and 13 deletions

View File

@@ -3762,19 +3762,19 @@ HTMLInputElement::PreHandleEvent(EventChainPreVisitor& aVisitor)
// that).
frame->InvalidateFrame();
}
} else if (aVisitor.mEvent->mMessage == eKeyUp) {
WidgetKeyboardEvent* keyEvent = aVisitor.mEvent->AsKeyboardEvent();
if ((keyEvent->mKeyCode == NS_VK_UP ||
keyEvent->mKeyCode == NS_VK_DOWN) &&
!(keyEvent->IsShift() || keyEvent->IsControl() ||
keyEvent->IsAlt() || keyEvent->IsMeta() ||
keyEvent->IsAltGraph() || keyEvent->IsFn() ||
keyEvent->IsOS())) {
// The up/down arrow key events fire 'change' events when released
// so that at the end of a series of up/down arrow key repeat events
// the value is considered to be "commited" by the user.
FireChangeEventIfNeeded();
}
}
}
if (aVisitor.mEvent->mMessage == eKeyUp && aVisitor.mEvent->IsTrusted()) {
WidgetKeyboardEvent* keyEvent = aVisitor.mEvent->AsKeyboardEvent();
if (MayFireChangeOnKeyUp(keyEvent->mKeyCode) &&
!(keyEvent->IsShift() || keyEvent->IsControl() || keyEvent->IsAlt() ||
keyEvent->IsMeta() || keyEvent->IsAltGraph() || keyEvent->IsFn() ||
keyEvent->IsOS())) {
// The up/down arrow key events fire 'change' events when released
// so that at the end of a series of up/down arrow key repeat events
// the value is considered to be "commited" by the user.
FireChangeEventIfNeeded();
}
}
@@ -8144,6 +8144,18 @@ HTMLInputElement::GetWebkitEntries(nsTArray<RefPtr<Entry>>& aSequence)
aSequence.AppendElements(mEntries);
}
bool HTMLInputElement::MayFireChangeOnKeyUp(uint32_t aKeyCode) const
{
switch (mType) {
case NS_FORM_INPUT_NUMBER:
return aKeyCode == NS_VK_UP || aKeyCode == NS_VK_DOWN;
case NS_FORM_INPUT_RANGE:
return aKeyCode == NS_VK_UP || aKeyCode == NS_VK_DOWN ||
aKeyCode == NS_VK_LEFT || aKeyCode == NS_VK_RIGHT;
}
return false;
}
} // namespace dom
} // namespace mozilla