Skip to content

Commit

Permalink
Merge pull request #1828 from spacejack/option-empty-string
Browse files Browse the repository at this point in the history
Fix select option to use empty string value, add tests.
  • Loading branch information
Isiah Meadows authored May 1, 2017
2 parents 414e74b + 08a6638 commit 8191f78
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
2 changes: 1 addition & 1 deletion render/render.js
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,7 @@ module.exports = function($window) {
//setting select[value] to same value while having select open blinks select dropdown in Chrome
if (vnode.tag === "select" && key === "value" && vnode.dom.value == value && vnode.dom === $doc.activeElement) return
//setting option[value] to same value while having select open blinks select dropdown in Chrome
if (vnode.tag === "option" && key === "value" && vnode.dom.value == value) return
if (vnode.tag === "option" && key === "value" && old != null && vnode.dom.value == value) return
// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.
if (vnode.tag === "input" && key === "type") {
element.setAttribute(key, value)
Expand Down
41 changes: 41 additions & 0 deletions render/tests/test-input.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,47 @@ o.spec("form inputs", function() {
o(select.dom.firstChild.value).equals("")
})

o("option value defaults to textContent unless explicitly set", function() {
var select = {tag: "select", children :[
{tag: "option", text: "aaa"}
]}

render(root, [select])

o(select.dom.firstChild.value).equals("aaa")
o(select.dom.value).equals("aaa")

//test that value changes when content changes
select = {tag: "select", children :[
{tag: "option", text: "bbb"}
]}

render(root, [select])

o(select.dom.firstChild.value).equals("bbb")
o(select.dom.value).equals("bbb")

//test that value can be set to "" in subsequent render
select = {tag: "select", children :[
{tag: "option", attrs: {value: ""}, text: "aaa"}
]}

render(root, [select])

o(select.dom.firstChild.value).equals("")
o(select.dom.value).equals("")

//test that value reverts to textContent when value omitted
select = {tag: "select", children :[
{tag: "option", text: "aaa"}
]}

render(root, [select])

o(select.dom.firstChild.value).equals("aaa")
o(select.dom.value).equals("aaa")
})

o("select yields invalid value without children", function() {
var select = {tag: "select", attrs: {value: "a"}}

Expand Down

0 comments on commit 8191f78

Please sign in to comment.