jQuery根据其他下拉列表的值选择下拉值

时间:2013-10-28 11:19:53

标签: javascript jquery

我正试图了解jQuery,但我无法弄清楚普通数组与jQuery数组,以及DOM元素与jQuery元素。

所以这是我尝试做的一个例子。这个例子很简单,但我需要一些手握:-p所以我的要求会很冗长,希望答案反过来是描述性的。

我有两个<select>下拉菜单,ID为#version#target

当我点击某个按钮时,我想在#target中选择跟随的选项,其名称与{em> last-but-one 中的值相同{ {1}}。 (该项目将存在)

示例:#version包含选项:a,b,c,x。 #version有选项a,b,c,d,h,m。

我点击按钮。应该发生的是:

  • 阅读#target中的最后一个选项:“c”
  • #version中找到具有相同名称的选项:第3个(即索引为2)
  • #target中的所选值设置为“c”之后的值,即“d”(第4个,索引3)

Here's a fiddle with the example.

第一步,我想我想出来了:

#target

//旁注:为什么var latestVersion = $("#version option").get(-2).text; 有效但.text无效?哦,.val()返回一个DOM元素
//所以如何回到jQuery元素呢? // .get()有效,但看起来很丑陋

对于第2步,我尝试了这个:

$($("#version option").get(-2)).val()

但它不起作用。并且GOT比手动迭代搜索正确值的所有值更好。

第3步:??。

4 个答案:

答案 0 :(得分:2)

如您所示,使用第一步尝试以下操作:

$('#button').click(function(){     
var latestVersion = $("#version option").get(-2).text;
//index of LAST-BUT-ONE
var target=$("#target option[value="+latestVersion+"]").index();
//Setting next index value
$("#target").prop("selectedIndex",target + 1);    
});

http://jsfiddle.net/GpBDY/16/

答案 1 :(得分:1)

.val()不适用于选项元素,但它适用于选择元素:

var v = $( "#version" ).val();

为您提供在下拉列表中选择的元素#version。

以下行不会执行您想要的操作:

var target = $("#target option:contains(latestVersion)");

这是因为latestVersion被视为值“latestValue”而不是变量的名称。要使用变量latestValue的值,请将latestValue放在字符串之外,如:

... contains(" + latestVersion + ")...

您可能对jQuery方法.next()与步骤2中的代码结合感兴趣,以获取下一个选项元素的值。请注意,如果没有下一个元素,则该值将为“未定义”。

答案 2 :(得分:1)

您可以使用nth-child选择version的值并使用此方式设置target的值:

$('#button').click(function(){     
    var latestVersion = $("#version option:nth-child(3)").text();
    $("#target").val($('#target option[value="'+latestVersion+'"]').next().text());    
});

演示Fiddle

答案 3 :(得分:0)

我不确定我是否理解你在寻找,但我认为你想要这样的东西:

$('#button').click(function(){ 
    var arrVersion = $("#version option");

    var latestVersion = $(arrVersion[arrVersion.length  - 2]).val();

    $("#target").val(latestVersion);
   var actualSelected = parseInt($("#target").prop("selectedIndex"));
    $("#target").prop("selectedIndex", actualSelected + 1);
});

http://jsfiddle.net/GpBDY/9/