使用JQuery或JavaScript,我想检测用户何时选择一个值,即使他们没有更改已经选择的值。
如何实现这一目标?
我试过了 -
$('#MyID').select(function(){ /*my function*/ });
和
$('#MyID').change(function(){ /*my function*/ }); //nothing changing, so this fails
但它们不起作用。
示例 - 我有一个带有年份列表的下拉列表,没有选择任何内容,用户选择“1976”,我运行一个函数。选择“1976”后,用户再次点击下拉列表并再次选择“1976” ,我想再次运行该功能。
答案 0 :(得分:5)
所有系统(至少在第二次点击...)
将开关设置为在选择时运行,并在捕获后和/或blur
上重置开关。
var go = false;//switch off
$('#MyID').on('click',function() {//on click
if (go) {//if go
//do stuff here with $(this).val()
go = false;//switch off
} else { go = true; }//if !go, switch on
}).on('blur', function() { go = false; });//switch off on blur
做了一个小提琴:http://jsfiddle.net/filever10/2XBVf/
编辑以获得键盘支持,这样的事情应该可行。
var go = false;//switch off
$('#MyID').on('focus active click',function() {//on focus/active
doit($(this));//do it
}).on('change', function() {
go=true;//go
doit($(this));//and doit
}).on('blur', function() { go = false; });//switch off on blur
function doit(el) {
if (go) {//if go
//do stuff here with el.val()
go = false;//switch off
} else {go=true}//else go
}
答案 1 :(得分:0)
您是否尝试过.blur()?
$('#MyID').blur(function(){
//my function
});
请注意,在触发功能之前,您必须单击页面下拉菜单之外的某处。我不知道是否可以通过。
<强> JsFiddle here 强>
答案 2 :(得分:0)
试试这个......
获取所选期权的价值......
$("body").click(function(event) {
if(event.target.nodeName== "SELECT"){
selectedValue = event.target.value;
}
});
然后从值
获取文本var text = $("option").filter(function() {
return $(this).attr("value") === selectedValue;
}).first().text();
答案 3 :(得分:0)
你有没有试过像:
$('#MyID li').click(function(){ //my function });
在这里,您要检测下拉列表中列表元素的点击次数,这应该是不同的选项。 (如果你的HTML略有不同,只需检查它,看看所有选项有什么共同点,它们是什么类型的元素?)
答案 4 :(得分:0)
$('#MyID option').hover(function(){
//user is on an option, but not selected it yet
},function(){
//user left an option without selecting
}).click(function(){
//user clicked on an option, selecting it
});
答案 5 :(得分:0)
答案 6 :(得分:0)
我已经在firefox上测试了一个工作的jsfiddle。我已经设法通过向选择框添加虚拟选项来执行您想要的操作。此虚拟选项具有display:none
样式,在选项列表中不可见。
<select id="myselect">
<option value="1">one</option>
<option value="2">two</option>
<option value="3" selected="selected">three</option>
<option value="4">four</option>
<option class="dummy" style="display:none">dummy</option>
</select>
$('#myselect').on('focus',function(){
$(this).find("option.dummy").prop("selected", true);
});
$('#myselect').on('change',function(){
var select=$(this);
var text=select.find("option:selected").text();
$('.dummy').attr('value',select.val()).text(text);
alert(select.val());
});