2013-06-26 65 views
8

使用JQuery或JavaScript,我想检测用户何时选择一个值,即使它们没有更改已选择的值。即使未更改,也会选择JQuery检测下拉值

这是如何实现的?

我试过 -

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

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

但他们没有工作。

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

+4

你不能,因为选择相同的值不发生变化,这是相同的。也许你可以只听点击这个元素,这就像你在不违反默认浏览器行为的情况下一样。 – adeneo

+0

也许试试听点击'选项'? –

+0

@AndrewPeacock - 选项元素不会在所有浏览器中触发鼠标事件。 – adeneo

回答

0

你试过.blur()

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

请注意,您必须在功能触发前点击页面下拉菜单之外的某处。我不知道这是否可以通过。

JsFiddle here

+0

可悲的是,这没有工作,彼得河感谢尝试。 –

+0

您也可以尝试'.focusin()'和'.blur()',它在Chrome中为我工作(请参阅小提琴)。 –

+0

当我选择已经选择的相同值时,会发生这种情况。 –

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(); 
0

文本你有没有尝试类似于:

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

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

+0

Nevermind ...我刚刚意识到这个HTML是由于我使用的插件,我尝试使用选项元素,如$('#MyID option')。click(...)'但这不起作用,对不起! – quantka

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

所有系统至少去(在第二次点击... )

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

+0

这不起作用,当用户选项卡上的选择... – DemonGyro

+1

正确的,如果OP已经指定,我会做更多的东西[this](http://jsfiddle.net/filever10/TyGPU/) – FiLeVeR10

+0

@ABogus是否解决了您的问题? – FiLeVeR10

0

试试这个代码。

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

Try Here!

0

我做了一个工作只的jsfiddle在Firefox测试。我已经设法通过向选择框添加一个虚拟选项来做你想做的事情。该虚拟选项的样式为display:none,并且在选项列表中不可见。

DEMO

<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()); 


}); 
相关问题