即使重新选择了相同的选项,也要为select运行更改事件
Run change event for select even when same option is reselected
基本上,我有一个下拉菜单,看起来像这样:
<select>
<option>0</option>
<option selected="selected">1</option>
<option>2</option>
<option>3</option>
</select>
我试图写一个函数,即使当你选择相同的选项,即,即使下拉菜单打开并重新选择所选的选项,我想要它执行该函数。
如果您的意思是用鼠标选择,您可以使用mouseup
。但是,当选择框被打开时,它也会触发,因此您需要跟踪它被触发的次数(偶数:select正在打开,奇数:select正在关闭):http://jsfiddle.net/T4yUm/2/.
$("select").mouseup(function() {
var open = $(this).data("isopen");
if(open) {
alert(1);
}
$(this).data("isopen", !open);
});
pimvdb的回答对我帮助很大,但我增加了一些额外的位来处理键盘激活和导航远离选择:
$('select').mouseup(... as in pimvdb... )
.blur(function() {
$(this).data('isopen', false);
}).keyup(function(ev) {
if (ev.keyCode == 13)
alert(1);
});
当下拉菜单打开时,blur处理程序处理从选择中导航出去,keyup处理程序处理当你用键盘改变选择的值时。这样的行为是,只有当用户单击返回以离开时,才认为他们最终选择了该值。如果你想让键盘有不同的行为,这应该不难做到。
select
不是这样使用的——在大多数情况下,你可以使用一些hack来获得这种行为,比如在select
上跟踪鼠标和键盘事件,但不能保证它们会继续工作,或者在每个平台上工作。
我建议…
- 在更改时将
select
重置为默认值,并使用一些其他文本来指示哪一个被"选中",或 - 使用
select
以外的控件。
你能更详细地描述一下最终目标吗?
另一种选择是使用.blur()
事件——http://jsfiddle.net/VKZb2/4/
Pro
无论哪种方式都会触发
的
它只在控件失去焦点时触发
我遇到了同样的问题。我只是给选项标签添加了一个点击事件,并改变了select的值:
$("#select option").mouseup(function() {
$(this).parent().val($(this).attr("value"));
// do something.
});
尝试下面的解决方案。它解释了通过鼠标点击或Esc键失去焦点。
// whether or not dropdown is opened
var open = false;
$("#selectElement").on("click", function() {
open = !open;
if (!open)
{
console.log("option has been selected/re-selected");
}
});
// update dropdown state upon loss of focus
$("#selectElement").on("blur", function() {
if(open){
open = !open;
}
});
// update dropdown state upon Esc key of focus
$(document).keyup(function(e) {
if (e.keyCode == 27) {
if(open){
open = !open;
}
}
});
相关文章:
- 无法在Ionic select中预先选择最后一个选项
- 根据select选项元素将表单重定向到不同的URL
- jQuery动态表单显示在select选项上
- 如何将CSS(特别是填充/边距)应用于select下拉菜单的选项或optgroup
- 如何在触发事件后选择select选项
- 当使用select作为标签时,如何使用ng选项禁用angularjs中的选项
- 如何在Javascript中从select标记的一系列选项中构建二维数组
- jQuery:根据select选项中的每页项目进行分页
- Angularjs-设置不带ng选项的select的默认值
- HTML SELECT-使用JavaScript按VALUE更改所选选项
- 需要将select标记选项值传递给ajax函数
- 单击select'时将数组行回显到文本区域中;s选项
- 使用JavaScript删除多个select选项
- 使用select选项转换时间.使用javascript
- 如何在选项select上使用jquery自动完成进行回发
- 为选项select设置多个值,并使用jQuery获取这些值
- AngularJS的默认选项select在IE9中不起作用
- 修改选项(select)元素的值
- Jquery选择器抛出选项(select)错误
- 在AngularJS中使用ng选项和选项select