【问题标题】:if this selected, var equals this value如果选中此选项,则 var 等于此值
【发布时间】:2014-03-27 01:26:44
【问题描述】:

我真的必须开始学习我的 javascript 技能了。我正在尝试,我认为使用 jquery 的简单任务,根据选择的option 为变量设置某个值。

<select>
<option>Choose size</option>
<option id="size1">1</option>
<option id="size2">2</option>
<option id="size3">3</option>
<option id="size4">4</option>
</select>

<input type="text" id="showPrice"/> 

jQuery:

var thisPrice;

$('#size1').each(function(){
    if(this.selected)
        thisPrice = 2;
        });
    $('#size2').each(function(){
    if(this.selected)
        thisPrice = 4;
        });

$('#size3').each(function(){
    if(this.selected)
        thisPrice = 5;
        });

$('#size4').each(function(){
    if(this.selected)
        thisPrice = 6;
        });


    $('#showPrice').val(thisPrice);

Link to my fiddle

我怎样才能让它工作?

【问题讨论】:

  • 使用选项值并获取选择值。简单
  • 这是一件简单的事情,如果您只需要在其他时间获取代码中的值,我建议避免使用事件处理程序,就像许多答案一样。

标签: jquery html forms select


【解决方案1】:

您的元素上不需要.each()s 或ids。基本上,您需要绑定一个事件处理程序来监听select 的更改,并做出反应。我会这样做:

http://jsfiddle.net/dGHak/

$('select').on('change', function () {
    var thisPrice = '';

    switch (this.value) {
        case '1':
            thisPrice = 2;
            break;

        case '2':
            thisPrice = 4;
            break;

        case '3':
            thisPrice = 5;
            break;

        case '4':
            thisPrice = 6;
            break;
    }

    $('#showPrice').val(thisPrice);
});

这是使用data- 属性的另一个选项:

http://jsfiddle.net/9fvZq/

<select>
    <option>Choose size</option>
    <option data-price="2">1</option>
    <option data-price="4">2</option>
    <option data-price="5">3</option>
    <option data-price="6">4</option>
</select>

$('select').on('change', function () {
    $('#showPrice').val($(this).find('option:selected').data('price'));
});

【讨论】:

  • 我什至不知道data-price。我非常喜欢那个。代码越少越好。
  • 这是一个data- 属性。你可以做任何你想要的..data-iddata-pickledata-orange等。
【解决方案2】:

试穿一下尺寸:

    <select>
        <option>Choose size</option>
        <option id="size1" value="2">1</option>
        <option id="size2" value="4">2</option>
        <option id="size3" value="5">3</option>
        <option id="size4" value="6">4</option>
    </select>
    <input type="text" id="showPrice"/>

将值放入选项中,然后您就可以使用这个简单的查询

    var changed = function(e){
       $("#showPrice").val(e.target.value);
    }
    $('select').on('change', changed);

摆弄我的木头http://jsfiddle.net/8ULeH/7/

【讨论】:

  • 不需要.attr().val()是设置元素value属性的正确方法。您还忘记声明 changed 变量,这隐含地使其成为全局变量,您应该声明它或使用匿名函数。 jsfiddle.net/8ULeH/5
【解决方案3】:

您应该只为选择设置一个 id,在选项中使用 value 而不是 id 并使用:

var val = $('#theID').val();

【讨论】:

  • jQuery 对象没有value 属性。
  • @FabrícioMatté - 谢谢。我不怎么用jquery。我只是在 JS 中做 ;)
  • 是的,.val 是一种方法,所以我已经为您解决了。 $('#theID')[0].value 也可以。
【解决方案4】:

event listener 添加到select 元素更改时触发:

$('select').on('change', function () {
    var thisPrice;

    $('#size1').each(function () {
        if (this.selected) thisPrice = 2;
    });
    $('#size2').each(function () {
        if (this.selected) thisPrice = 4;
    });

    $('#size3').each(function () {
        if (this.selected) thisPrice = 5;
    });

    $('#size4').each(function () {
        if (this.selected) thisPrice = 6;
    });


    $('#showPrice').val(thisPrice);
});

http://jsfiddle.net/8ULeH/1/

我们实际上可以用 case 语句进一步清理它:

$('select').on('change', function () {
  // Gets the id of the selected option
  var theId = this.options[ this.selectedIndex ].id;
  switch (theId) {
    case 'size1':
        $('#showPrice').val(2);
        break;
    case 'size2':
        $('#showPrice').val(4);
        break;
    case 'size3':
        $('#showPrice').val(5);
        break;
    case 'size4':
        $('#showPrice').val(6);
        break;
  }
});

【讨论】:

  • 感谢您编辑附有链接的帖子。我真的需要开始更多地阅读这些 java 的东西。所以我几乎需要一个事件后跟一个函数,对吧?
  • 是的,我只是用另一种方式进行了编辑,这样会更快一些。如果我回答了你的问题,别忘了点赞并接受!
  • 你回答了我的问题,我也喜欢 case 方法。我也在考虑做一个 if elseif 循环,但不知道该怎么做。一旦允许我,我会接受你的回答。我想您必须等待 7 分钟才能接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2023-03-15
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多