我有几个<select>
框都使用相同的前缀,我想设置一个递归函数来基本上为我做的工作。
$('[id^="by_"]').change(function(e)
{
var elem = e;
console.log(e.value);
});
根据这段代码我的意图很清楚?我是在正确的轨道上吗?
控制台打印出来:undefined
答案 0 :(得分:2)
我认为你在正确的轨道上 - 你正在使用的选择器匹配前缀“by_”,并且你将更改事件绑定到所有这些。确保将其放在$(document).ready
或类似内容中。你有这个代码的任何问题吗?我不会使用e
参数,而是在函数内部使用this
来引用元素,并使用$(this)
来获取它的jQuery对象。所以要获得价值,你可以使用:
this.value
// or
$(this).val()
(忽略e
和elem
内容,尽管将$(this)
存储在elem
之类的内容并不是一个坏主意,因此您可以参考而不是每次需要时重新创建jQuery对象)
当使用jQuery对事件进行回调时,回调的(第一个)参数是一个event
对象,它解释了发生的事件(http://api.jquery.com/category/events/event-object/)并且不包含元素的许多事情 - 这就是this
的用途!
答案 1 :(得分:1)
e
是没有value
属性的事件对象,您应该使用this
代替:
$('[id^="by_"]').change(function(e) {
var elem = this;
console.log(this.value);
});
或者如果您想使用event
对象,可以使用target
属性:
e.target.value
答案 2 :(得分:0)
由于你已经在使用jQuery,为什么不能这样:
$('[id^="by_"]').change(function(e)
{
var $elem = $( this );
console.log( $elem.val() );
});
答案 3 :(得分:0)
是不是更像这样:
$('[id^="by_"]').change(function()
{
console.log($('option:selected',this).val());
});