0

我有几个<select>盒子都使用相同的前缀,我想设置一个递归函数来基本上为我完成这项工作。

$('[id^="by_"]').change(function(e)
            {
                var elem = e;
                console.log(e.value);
            });

基于这段代码,我的意图很清楚吗?我在正确的轨道上吗?

控制台打印出:undefined

4

4 回答 4

2

我认为您走在正确的轨道上-您使用的选择器与前缀“by_”匹配,并且您将更改事件绑定到所有这些选择器。确保你把这个$(document).ready或类似的。您对此代码有任何问题吗?我不使用e参数,而是this在函数内部使用来引用元素并$(this)获取它的 jQuery 对象。因此,要获得价值,您可以使用:

this.value
// or
$(this).val()

(忽略eand东西,尽管存储在类似的东西中elem并不是一个坏主意,这样您就可以引用它而不是每次需要时都重新创建 jQuery 对象)$(this)elem

当使用 jQuery 对事件使用回调时,回调的(第一个)参数是一个event对象,它解释了有关发生的事件的许多事情(http://api.jquery.com/category/events/event-object/)并且确实不持有元素 - 这就是this目的!

于 2012-10-18T16:37:15.853 回答
1

e在您的代码中是没有value属性的事件对象,您应该使用this

$('[id^="by_"]').change(function(e) {
     var elem = this;
     console.log(this.value);
});

或者如果你想使用event对象,你可以使用target属性:

e.target.value
于 2012-10-18T16:37:30.203 回答
0

既然你已经在使用 jQuery,为什么不这样:

$('[id^="by_"]').change(function(e)
{
    var $elem = $( this );
    console.log( $elem.val() );
});
于 2012-10-18T16:37:07.000 回答
0

是不是更像这样:

$('[id^="by_"]').change(function()
            {
                console.log($('option:selected',this).val());
            });
​

jsfiddle

于 2012-10-18T16:41:50.140 回答