Bug 1203668 - Setting the value of a <select> to a non-matching option should deselect all options and set selectedIndex to -1. r=bz

This commit is contained in:
Mats Palmgren 2015-09-12 12:34:37 +02:00
Родитель a0d1bf988d
Коммит 9c95b58321
3 изменённых файлов: 66 добавлений и 1 удалений

Просмотреть файл

@ -1201,9 +1201,11 @@ HTMLSelectElement::SetValue(const nsAString& aValue)
option->GetValue(optionVal); option->GetValue(optionVal);
if (optionVal.Equals(aValue)) { if (optionVal.Equals(aValue)) {
SetSelectedIndexInternal(int32_t(i), true); SetSelectedIndexInternal(int32_t(i), true);
break; return NS_OK;
} }
} }
// No matching option was found.
SetSelectedIndexInternal(-1, true);
return NS_OK; return NS_OK;
} }

Просмотреть файл

@ -593,3 +593,4 @@ skip-if = buildapp == 'b2g' # bug 1129014
[test_viewport_resize.html] [test_viewport_resize.html]
[test_extapp.html] [test_extapp.html]
[test_image_clone_load.html] [test_image_clone_load.html]
[test_bug1203668.html]

Просмотреть файл

@ -0,0 +1,62 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1203668
-->
<head>
<title>Test for Bug 1203668</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1203668">Mozilla Bug 1203668</a>
<p id="display"></p>
<div id="content">
<select class="select" multiple>
<option value="foo" selected>foo</option>
<option value="bar" selected>bar</option>
</select>
<select class="select" multiple>
<option value="foo">foo</option>
<option value="bar" selected>bar</option>
</select>
<select class="select" multiple>
<option value="foo">foo</option>
<option value="bar">bar</option>
</select>
<select class="select" size=1>
<option value="foo">foo</option>
<option value="bar" selected>bar</option>
</select>
<select class="select" size=1>
<option value="foo">foo</option>
<option value="bar">bar</option>
</select>
</div>
<pre id="test">
<script type="application/javascript">
/** Test for Bug 1203668 **/
SimpleTest.waitForExplicitFinish();
function runTest()
{
var selects = document.querySelectorAll('.select');
for (i=0; i < selects.length; i++) {
var select = selects[i];
select.value = "bogus"
is(select.selectedIndex, -1, "no option is selected");
is(select.children[0].selected, false, "first option is not selected");
is(select.children[1].selected, false, "second option is not selected");
}
SimpleTest.finish();
}
SimpleTest.waitForFocus(runTest);
</script>
</pre>
</body>
</html>