为啥我无法获得 <select> 字段的正确值?
Posted
技术标签:
【中文标题】为啥我无法获得 <select> 字段的正确值?【英文标题】:Why I can not get the correct value of my <select> field?为什么我无法获得 <select> 字段的正确值? 【发布时间】:2011-08-19 09:37:36 【问题描述】:在我的 index.html 中,我有一个选择下拉菜单:
<select id="car">
<option value="bmw">BMW</option>
<option value="toyota">TOYOTA</option>
</select>
我的 js:
var c = $('#car');
var selection;
c.change(function()
if(c.val()==='bmw')
selection = 'BMW';
else if(c.val()==='toyota')
selection = 'TOYOTA';
);
console.log(c.val());
console.log(selection);
第一次加载页面时,初始选择是BMW,我得到控制台输出“BMW”这很好,然后我选择“TOYOTA”,但两个控制台输出仍然是“BMW”。
如何获取当前
jQuery .change(...)
函数外选择的值在选择被更改后??
______错字已修复____________
car.val()
和 Selection
都是我在帖子中的错字,在我的代码中我确实使用了selection
和c.val()
。
我的观点是如何从 jQuery change()
函数中获取当前选择值。请不要再讨论我的错字。谢谢。
【问题讨论】:
您在 c.change(...) 中使用的汽车变量来自哪里?我在您发布的代码中的任何地方都看不到它声明。 Alo,您声明了一个变量 Selection,但稍后使用 selection - 据我所知,javascript 区分大小写。 我看到的第一件事:var Selection;
应该是var selection;
这实际上可能是你的问题。另一件事:console.log 是否又被调用了?
您应该使用c.val()
,而不是car.val()
。变量car
不存在。
嗨,car.val() 是我的错字,我确实在我的代码中使用了 c.val()。对不起。
【参考方案1】:
当您应该使用c
时,您正在查看car
。 car
没有 val()
方法。
if(c.val()==='bmw')
selection = 'BMW';
else if(c.val()==='toyota')
selection = 'TOYOTA';
另请注意,var Selection;
与 selection
(小写)不是同一个变量。
更好的方法可能是:
c.change(function()
selection = c.find(":selected").text();
);
工作示例:http://jsfiddle.net/hunter/XespU/
【讨论】:
"selection" 是我的错字,"car.val()" 也是。我确实使用“选择”和“c.val()”。我的观点是如何在 .change() 函数之外获取更新的值。您的示例没有回答我的问题...因为您在 jQuery change() 函数中发出警报(选择)。 一旦change
事件触发,selection
将设置为(在此事件范围之外),当前选定的值为#car
。【参考方案2】:
您应该使用小写定义您的 var 选择,如下所示:
var selection;
为什么? Javascript 区分大小写,因此,Sensitive 和sensitive 是不同的变量。
另外,你应该定义你的汽车变量,像这样:
var selection;
c.change(function()
var car = $(this); //declare it
if(car.val()==='bmw')
selection = 'BMW';
else if(car.val()==='toyota')
selection = 'TOYOTA';
);
【讨论】:
请查看我更新的帖子。 “Selection”和“car.val()”都是我的错字。在我的真实代码中,我确实使用了“selection”和“c.val()”以上是关于为啥我无法获得 <select> 字段的正确值?的主要内容,如果未能解决你的问题,请参考以下文章
从 HTML 生成带有 <SELECT> 表单字段的 PDF 总是显示多行下拉菜单
为啥我无法获得 /comments/new.html.erb?