8

使用 JQuery 或 JavaScript,我想检测用户何时选择了一个值,即使他们没有更改已经选择的值。

如何实现?

我试过了 -

$('#MyID').select(function(){ /*my function*/ });

$('#MyID').change(function(){ /*my function*/ }); //nothing changing, so this fails

但它们不起作用。

示例 - 我有一个包含年份列表的下拉列表,没有选择任何内容,用户选择“1976”,我运行一个函数。选择“1976”后,用户再次单击下拉菜单并再次选择“1976” ,我想再次运行该功能

4

7 回答 7

6

所有系统都运行(至少在第二次点击时......)

将开关设置为在选择时运行,并在捕获和/或打开开关后重置开关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
}

做了一个小提琴:http: //jsfiddle.net/filever10/TyGPU/

于 2014-01-20T19:50:48.163 回答
0

你试过.blur()吗?

$('#MyID').blur(function(){
    //my function
});

请注意,在触发该功能之前,您必须单击页面上下拉菜单之外的某个位置。不知道这个能不能通过。

JsFiddle在这里

于 2013-06-26T18:02:17.887 回答
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

});
于 2014-01-17T06:48:36.170 回答
0

试试这个代码。

$("#MyID").click(function (){
    alert($("#MyID").val());
});

试试这里!

于 2014-01-21T07:38:05.230 回答
0

您是否尝试过类似的方法:

$('#MyID li').click(function(){ //my function });

在这里,您正在检测对下拉列表中的列表元素的点击,这应该是不同的选项。(如果您的 HTML 略有不同,只需检查一下,看看所有选项有什么共同点,它们是什么类型的元素?)

于 2014-01-16T18:34:21.160 回答
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());


});
于 2014-01-21T21:26:50.497 回答
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();
于 2013-06-28T08:28:19.917 回答