1

我正在使用 JQuery blur() 方法从“select”元素的选项中提取值,但由于某种原因,它总是提取 selectedIndex = 0 的值,而不是我选择的 selectedIndex。

这是 --> JSFiddle <-- 出于某种原因,第一行工作正常(长度),但其他行都不起作用。

在任何文本框中键入一个数字(第一个“长度”除外),然后从相邻的 SELECT 框中选择一个项目,然后单击 SELECT

您将看到代码始终在每个 SELECT 元素中选择 option=0 的值。它也无法将我的“数据隐藏”属性识别为数字(请参阅文本框元素中的 html)

有人可以帮忙吗?我已经坚持了一天了。

**另外,由于某种原因,这仅适用于 JQuery 1.7.2 而不适用于 1.9 版本(它不喜欢 'option:selected' 代码,有人知道该片段如何符合最新版本吗?

$('select').blur(function() {

//Get the value of the option chosen
var unit = $(this + 'option:selected').val();

//If the selectedIndex is 0 then focus on the select and make the user chose a unit.
  if ($(this).prop('selectedIndex') == 0) {
      $(this).focus();
    return;
} else {


//Remove the 'd' in front of the 'select' element ID and you will have the ID of the   textbox
        var txt = "#" + $(this).attr("id").substr(1);

//Get the numerical value of the textbox
        var mval = parseFloat($(txt).val());

            if ($(txt).attr('data-hid') == "OFF") {
                var hid = mval / unit;
                $(txt).attr('data-hid', hid);
                 alert("hid = " + hid + "\nmval = " + mval + "\nunit = " + unit);
            }
            else 
            {
                var hid = $(txt).attr('data-hid');
                var newtxt = hid * unit;
                $(txt).val(newtxt);
            }
}
main();
});
4

3 回答 3

2

为什么不直接使用$(this).val()which 为您提供所选项目的选定值?无需先专门获取选项元素。

http://api.jquery.com/val/

文档甚至这么说。

于 2013-03-01T14:54:30.157 回答
1

这一行是错误的:

//Get the value of the option chosen
var unit = $(this + 'option:selected').val();

应该:

var unit = $(':selected', this).val();

要了解原因(除了查看 jQuery 文档),请在您的blur函数下方尝试此行:

console.log(this + 'option:selected'); //outputs something like [object HTMLSelectElement]option:selected

可以执行以下操作:

console.log('#' + $(this).attr('id') + ' option:selected'); //outputs something like #mySelectBox option:selected

但是现在我们变得有点荒谬了:D ...但也许它可以帮助您了解 jQuery 选择器的工作原理至少 =0]

Torsten 的回答确实是正确的方法

于 2013-03-01T14:56:55.407 回答
1

如果要获取一个select的值,也就是被选中的option的值,正确的做法是:

$(this).val(); // Inside the .blur "this" points to your select

然后,您可以检查值是否为空,如果为空则返回,而不是检查所选索引是否为 0,否则该人从您的选择中选择了有效值。

此外,在您的小提琴 html 上,第一个选项是“已选择”,您不必输入该关键字即可使第一个选项表现为默认值,如果未选择任何选项,则选择第一个选项。

此外,您确定要在模糊时触发此事件吗?不会 .change 更适合您的目的。根据您的描述,“工作流程”是在输入中键入一个数字,然后在选择中选择一个单位。当用户选择一个值时,只有在选择字段丢失焦点时,才会更改触发器。

于 2013-03-01T14:59:39.273 回答