【问题标题】:How to swap values in select lists with jquery?如何使用 jquery 交换选择列表中的值?
【发布时间】:2012-10-22 09:47:46
【问题描述】:

我有两个简单的选择列表,想添加一个选项来交换其中的值。因此,有第一个带有 e 的列表。 G。值为“ONE”,另一个列表的值为“TWO”。当您单击“交换”按钮时,第一个应具有“TWO”的值,第二个应具有“ONE”的值。

这里是 jsFiddle:http://jsfiddle.net/YPyRF

这是 HTML 代码:

<div class="form-item-from">
  <label for="form-item-from">From </label>
 <select class="form-select" id="form-item-from"><option value="ONE">ONE</option></select>
</div>

<div class="form-item-to">
  <label for="form-item-to">From </label>
 <select class="form-select" id="form-item-to"><option value="TWO">TWO</option></select>
</div>

<a href="">Swap values</a>

这里是js代码(来自Is there a native jQuery function to switch elements?):

jQuery("#form-item-from").after(jQuery("#form-item-to"));

但是,这在这种情况下不起作用。此外,该功能不应依赖于选择列表或交换按钮的位置(我找到了一种解决方案,其中交换按钮必须位于两个列表之间)。

【问题讨论】:

  • 您要切换所有选项吗?还是只是选定的?
  • 你需要编写将链接与js绑定的代码吗?
  • 示例不是很明确,因为每个选择只有一个选项并且它们是不同的。值更改需要的代码少于 html 修改。充分解释选择与目标的关系

标签: javascript jquery


【解决方案1】:

这样的事情会起作用:

$("#SwapButton").click(function(e) {
    e.preventDefault();//This prevents the A tag from causing a page reload

    //Get the values
    var fromVal = $("#form-item-from option:selected").val();
    var fromText = $("#form-item-from option:selected").text();
    var toVal = $("#form-item-to option:selected").val();
    var toText = $("#form-item-to option:selected").text();

    //Set the values
    $("#form-item-from option:selected").val(toVal);
    $("#form-item-from option:selected").text(toText);
    $("#form-item-to option:selected").val(fromVal);
    $("#form-item-to option:selected").text(fromText);
});​

Here is your fiddle, updated

注意:这只会切换选中的option 项目。如果这不是您想要的,那么我误解了,您可能会更好地使用亚当的解决方案。 Here is a better example 说明了它只交换所选值的事实。

【讨论】:

  • +1 表示仅交换所选项目的示例。可能对其他人有用
  • 是的,该选项有一个“选定”类,所以这就是我需要的。谢谢!
  • 对不起,忘记了,因为我在检查谁先回答,然后意识到我需要“选择”选项。无论如何,现在接受答案:)
  • 可以使用clone()replaceWith()大大简化
【解决方案2】:

试试这样的:jsfiddle

当您点击链接时...
1) 将#form-item-from 中的所有选项保存到变量中
2) 将#from-item-to 中的所有选项保存到变量中
3) 使用来自 #to
的选项更新 #from 4) 使用#from 中的选项更新#to

$(function() {
    $("a").click(function() {
        var selectOne = $("#form-item-from").html();
        var selectTwo = $("#form-item-to").html();

        $("#form-item-from").html(selectTwo);
        $("#form-item-to").html(selectOne);
        // stops the link going anywhere
        return false;
    });
});

【讨论】:

  • 谢谢你的回答,它有效,但我忘了提到如果它们被选中,选项有“选定”类。我以为没有区别。
【解决方案3】:

试试这个,

$("a").click(function(e){
    e.preventDefault();        
    var a = jQuery("#form-item-from").html();
    var b = jQuery("#form-item-to").html();
    jQuery("#form-item-from").html(b);
    jQuery("#form-item-to").html(a);
})​

演示:http://jsfiddle.net/jQACe/3/

【讨论】:

  • 我不喜欢这个答案,您的示例代码没有演示您如何阻止 A 标记的默认操作。如果有人要使用您发布的此答案,那么他们可能会遇到页面刷新问题。
  • 查看jsfiddle代码,我用href="javascript:void(0)"
  • 是的,我知道你是怎么做到的,但你不应该假设链接总是有效的。我个人也不喜欢像这样混合内联 javascript - 它使理解和查找错误变得更加困难
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2012-01-12
  • 2020-12-21
  • 1970-01-01
  • 2018-09-04
相关资源
最近更新 更多