【问题标题】:How to autoselect option depending on input's value如何根据输入值取消选择选项
【发布时间】:2011-05-20 06:15:28
【问题描述】:

我需要根据输入的值在准备好的文档上实际选择 select 的选项。

例子:

<select id="mySelect">
<option value="1">myVal1</option>
<option value="2">myVal2</option>
</select>

<input type="text" id="myId" value="2">

例如,我们有一个预定义的页面加载输入值“2”。我需要自动选择选择框,它的选项与输入“myId”具有相同的值。我的意思是必须选择“mayVal1”。

当输入没有值时,选择必须作为默认值。

谢谢!

【问题讨论】:

  • 你在使用任何 javascript 框架吗?或者你正在研究如何使用普通的 javascript 来做到这一点
  • 对不起,我忘了说我正在使用 jquery
  • @AndreasWong,请编辑标题和可能的帖子本身,以添加您是否喜欢或允许使用 jQuery 的答案。该标签是一个很好的起点,但对于寻找类似解决方案的其他人来说,清楚是件好事。
  • “选择必须按默认行为”究竟是什么意思,您的意思是它的行为应该与给定上述标记的行为一样,并且没有刻意设置值?

标签: javascript jquery select input option


【解决方案1】:

您提到的“准备好文档”有点暗示您可能正在使用 jQuery,并且做出了这样的假设(尽管可能是错误的),我为您提供:

$(document).ready(
    function(){
        var theValue = $('#myId').val();
        $('option[value=' + theValue + ']')
            .attr('selected',true);
    });

With a demo at JS Fiddle.


已编辑以回应 OP 的问题:

如何将选项的值与输入值中的第一个单词进行比较?我的意思是,如果我有选项值 'hello' 并且输入值 'hello world' 脚本必须选择在其值中包含 'hello' 的选项。

好吧,鉴于您发布的示例和您的问题之间存在差异,我将尝试解决这两种可能性。

首先,根据其 text 组件(在您上面的代码中,'myVal1','myVal2' 位)选择option

$(document).ready(
    function() {
        $('form:eq(0)').submit(
            function() {
                var theValue = $('#myId').val().split(" ",1);
                $('option:contains(' + theValue + ')').attr('selected', true);
                return false;
            });
    });

JS Fiddle demo:注意option 元素的文本组件代表option 元素的

其次,如果要将输入到myId 输入元素中的值的第一部分链接到select/option 元素的

$(document).ready(
    function() {
        $('form:eq(0)').submit(
            function() {
                var theValue = $('#myId').val().split(" ",1);
                $('option[value=' + theValue + ']').attr('selected', true);
                return false;
            });
    });

JS Fiddle demo.

这些演示可以keyup() 或等效的动作/事件一起使用,但submit() 似乎是更好的选择。

【讨论】:

  • 这正是我想要的。 10 倍很多
  • @gov 这只是一个诀窍... =) 那,我认为,因为 SO 设置的负载平衡方面。所以我们不会同时看到相同的问题;所以我可能比你早几分钟就发现了这个问题。
  • 请再问一个问题。如何将选项的值与输入值中的第一个单词进行比较?我的意思是如果我有选项值'hello'并且输入值'hello world'脚本必须在它的值中选择包含'hello'的选项。谢谢!
  • @Igor,StackOverflow 更适合提出精确而狭隘的问题,这些问题可能在您的个人场景之外具有更广泛的适用性。如果您有多个问题,我建议您将它们作为单独的问题发布,否则如果您正在寻找更具互动性和灵活性的讨论,那么聊天或其他平台可能是更好的选择。
【解决方案2】:

类似下面的东西应该可以工作///

<select>
    <option value="0">One</option>
    <option value="1">Two</option>
</select>

$(document).ready(
    var inputValue = $('#id').val();
    $('select').val('1'); // selects "Two"
    $('select').val(inputValue); // also selects "Two"

});

【讨论】:

  • 如果你有多个选择框给出一个 id
【解决方案3】:

在原版 JS 中:

var listener = function(ev){
var input = document.getElementById('myId');
for(var i = 0, elems = document.getElementById('mySelect'), l = elems.length; i < l; i++)
    elems[i].selected = elems[i].value == input.value;    
}
listener();
document.getElementById('myId').addEventListener('change', listener, false);

使用 jQuery:

$(function(){
    $('#myId').change(function(){
       $('#mySelect option').removeAttr('selected').filter('[value=' + $(this).val() + ']').attr('selected', true);
    }).change()
})

【讨论】:

  • 为什么我们需要改变???文本框已在加载时填充,您需要做的就是阅读设置它...
  • 更新了代码。我认为在更改时触发它也是一个好主意,不是吗?
  • 上面的代码是否会在加载时设置选择框???
  • 可以,只要您在 window.onload 函数中输入代码即可。顺便说一句,你是否使用 jQuery?
【解决方案4】:

$('#mySelect').val('2').change();

【讨论】:

  • 您能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-17
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多