【问题标题】:Using argument (this) passed via element eventhandler使用通过元素事件处理程序传递的参数(this)
【发布时间】:2010-05-18 14:44:40
【问题描述】:

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

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


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

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

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

所以,这行不通:

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

因为它还不存在。

感谢您的帮助。

【问题讨论】:

  • 您可以使用您的 jQuery 解决方案,您只需要在 select 的 ajax 调用完成后运行脚本。

标签: javascript jquery ajax element arguments


【解决方案1】:

如果您的元素不是在加载时创建的,而是异步加载的,您可以像这样绑定更改事件:

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

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

更新:您至少需要 jQuery 1.4.1 来完成此操作

【讨论】:

【解决方案2】:

如果该元素在文档加载时不存在,则意味着稍后可能通过 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) {
                // ...
            });
        });
    }
});

【讨论】:

  • 很酷,谢谢。我还有一个问题。我需要在哪里插入此代码?进入加载文件的文件还是加载的(ajax)文件?
  • 您应该已经在某处拥有此代码。您需要插入的唯一代码是成功调用的函数中的$("select) ...
【解决方案3】:

如果您确实选择坚持使用 onchange 属性(我不建议这样做),请使用:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    • 2012-08-30
    • 2014-08-28
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多