HTML SELECT – 即使选项未更改,也触发JavaScript ONCHANGE事件
我有以下标记:
<select onchange="jsFunction()"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select>
当用户拉下combobox并select与之前select的选项相同的选项(或根本不改变select)时,JavaScript不会将其视为onchange
事件。 所以, jsFunction()
不被调用。 但是我想在这种情况下调用jsFunction()
。 我怎样才能做到这一点?
我会这样做:
<select onchange="jsFunction()"> <option value="" disabled selected style="display:none;">Label</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select>
如果你想要的话,你可以使用与第一个选项相同的标签,在这种情况下,这个标签是1.甚至更好:在这个标签中放置一个标签。
你必须添加空的选项来解决它,
我也可以给你一个更多的解决scheme,但它取决于你是否适合你因为用户select默认选项后,select其他选项比jsFunction将被调用两次。
<select onChange="jsFunction()" id="selectOpt"> <option value="1" onclick="jsFunction()">1</option> <option value="2">2</option> <option value="3">3</option> </select> function jsFunction(){ var myselect = document.getElementById("selectOpt"); alert(myselect.options[myselect.selectedIndex].value); }
这工作:
<select name="type" onmousedown="this.value='';" onchange="alert('Changed.');"> <option value='1'>One</option> <option value='2'>Two</option> <option value='3'>Three</option> <option value='4'>Four</option> <option value='5'>Five</option> <option value='6'>Six</option> <option value='7'>Seven</option> <option value='8'>Eight</option> <option value='9'>Nine</option> <option value='10'>Ten</option> </select>
对每个选项元素使用“onmouseup”属性。 它是冗长的,但应该工作。 另外,根据你的函数实际上在做什么,你可以安排一些不同的事情,假设这个数字在处理程序中很重要:
<select> <option onmouseup="handler()" value="1">1</option> //get selected element in handler <option onmouseup="handler(2)" value="2">2</option> //explicitly send the value as argument <option onmouseup="handler(this.value)" value="3">3</option> //same as above, but using the element's value property and allowing for dynamic option value. you could also send "this.innerHTML" or "this.textContent" to the handler, making option value unnecessary </select>
JavaScript代码:
- 在mousedown事件上:将selectedIndex属性值设置为-1
- 在变化事件:处理事件
唯一的缺点是,当用户点击下拉列表时,当前select的项目不会出现select
只需将关联的<select>
标记的selectIndex
设置为-1
作为处理事件的最后一步。
mySelect = document.getElementById("idlist"); mySelect.selectedIndex = -1;
它每次都有效,消除高亮,并允许您再次select相同(或不同)的元素。
它没有被触发,因为这个值没有“改变”。 这是一样的价值。 不幸的是,您无法使用change
事件来实现所需的行为。
您可以处理blur
事件,并在用户离开select框时执行所需的任何处理。 这样,即使用户select相同的值,您也可以运行所需的代码。
尝试这个。 只需添加一个空的选项。 这将解决您的问题。
<select onchange="jsFunction()"> <option></option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select>
喜欢这个。
第一个是“空的”。
<option></option> <option>01</option> <option>02</option> <option>03</option> <option>04</option> <option>05</option> <option>06</option> <option>07</option> <option>08</option> <option>09</option> <option>10</option> <option>11</option> <option>12</option>