关于更改所选项目的jquery ui selectmenu

时间:2012-01-30 09:41:32

标签: jquery jquery-ui select-menu

我正在尝试实现一个电流转换器,我成功但现在我正在实现一个按钮,它将改变两个选定菜单之间的选定选项,这意味着如果在第一个菜单中我已经选择了usd并且在第二个菜单中我选择gbp然后按下按钮,我想在第一个菜单中选择gbp,在第二个菜单中选择usd。 我已经设法更改两个菜单上的选定选项,但它不会在菜单本身中显示。 我忘记了什么?

 $(function(){
    $('a#switchButton').click(function(){
        var $sel1 = $('#fromCurrency');
        var val1 = $sel1.val();
        var $sel2 = $('#toCurrency');
        var val2 = $sel2.val();
        $sel1.find("option[value='"+val1+"']").attr("selected",false);
        $sel1.find("option[value='"+val2+"']").attr("selected",true);
        $sel2.find("option[value='"+val2+"']").attr("selected",false);
        $sel2.find("option[value='"+val1+"']").attr("selected",true);
    });
});

这是一个屏幕截图,当按下中间的图标时,此处没有任何变化,但仅在代码本身中。如果我按下图标,我希望usd出现在“from”中,而inr则出现在“to”中。

Screen shot

jsfiddle.net example

3 个答案:

答案 0 :(得分:2)

原来 selectmenu()功能有自己改变数值的方法。
在这里查看一个有效的版本:http://jsfiddle.net/atR6D/55/

$('#switchButton').click(function(){
    var sel1 = $('#fromCurrency').selectmenu("value");
    var sel2 = $('#toCurrency').selectmenu("value");
    $('#fromCurrency').selectmenu("value", sel2);
    $('#toCurrency').selectmenu("value", sel1);
});  

看起来它正在<span>标签中表示选择列表,这就是您无法真正更改原始选择列表的原因。

答案 1 :(得分:1)

 $(function(){
    $('#switchButton').click(function(){
        var $sel1 = $('#fromCurrency');
        var $sel2 = $('#toCurrency');

        var tmp = $sel2.val();
        $sel2.val($sel1.val());
        $sel1.val(tmp);

    });
});

这是demo

答案 2 :(得分:1)

来自http://wiki.jqueryui.com/w/page/12138056/Selectmenu

Methods:
   refresh
       parses the original element again, updates the value option and
       rerenders the menu triggers events if value changed 

所以只需在对基础选择进行更改后添加:

$(function(){
    $('a#switchButton').click(function(){
        var $sel1 = $('#fromCurrency');
        var val1 = $sel1.val();
        var $sel2 = $('#toCurrency');
        var val2 = $sel2.val();
        $sel1.find("option[value='"+val1+"']").attr("selected",false);
        $sel1.find("option[value='"+val2+"']").attr("selected",true);
        $sel2.find("option[value='"+val2+"']").attr("selected",false);
        $sel2.find("option[value='"+val1+"']").attr("selected",true);

        $sel1.selectmenu('refresh');
        $sel2.selectmenu('refresh');

        return false;
    });
});