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>