使用参数(this)通过元素eventhandler传递

时间:2010-05-18 14:44:40

标签: javascript jquery ajax element arguments

我想在JS函数中使用我传递的参数(this)并将其视为jQuery变量。 例如:

<script>    
function useMe(obj){
  $(obj).val();
  ...
  ... 
  ...
}
</script>


<select id="selectid" onChange="useMe(this)">
    <option>......</option>
</select>

是否有可能将传递的参数视为jQuery元素?

顺便说一下。我需要这样做,因为select-element不是在加载时创建的。稍后将异步创建select元素。

所以,这不起作用:

$("select").each(function (i){
    var select_id = $(this).attr("id");                
    $(this).change(function(e){  

因为它还不存在。

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

如果你的元素没有在加载时创建,而是异步加载,你可以像这样绑定change事件:

$('select').live('change',function(){
  // ...
});

这会将定义的函数绑定到每个现有和每个新选择项上的change事件。

更新:您至少需要jQuery 1.4.1

答案 1 :(得分:0)

如果元素在文档加载时不存在,则意味着稍后可能通过AJAX调用添加它。如果是这种情况,只需将change句柄注册放在success回调中。

$.ajax({
    url: '/somescript',
    success: function() {
        // some code that injects the select into the DOM
        // ...
        $("select").each(function(i) {
            var select_id = $(this).attr("id");                
            $(this).change(function(e) {
                // ...
            });
        });
    }
});

答案 2 :(得分:0)

如果您确实选择坚持使用onchange属性(我建议反对),请使用:

<script>    
function useMe($obj){
  $obj.val();
  ...
  ... 
  ...
}
</script>

<select id="selectid" onChange="useMe($(this))">
    <option>......</option>
</select>