使用jquery和.change()选择html元素id

时间:2012-10-18 16:29:52

标签: javascript jquery html dom

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

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

根据这段代码我的意图很清楚?我是在正确的轨道上吗?

控制台打印出来:undefined

4 个答案:

答案 0 :(得分:2)

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

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

(忽略eelem内容,尽管将$(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());
            });
​

jsfiddle