You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在点击元素时撤销外部函数?为何点击后文本未更改?

点击元素后文本未变化的原因及修复方案

先来看你写的代码:

JavaScript 代码

$(function(){ // ready function
  myfunc($el){
    $el.text("You clicked ..!");
  }
  $("div").click(myfunc($(this)));
})

CSS 代码

div{
  padding: 20px;
  border: 1px solid gray;
  cursor: pointer;
  text-align: center;
}
div:hover{
  background-color: #f1f1f1;
}

HTML 代码

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Click Here</div>

问题出在哪?

你绑定点击事件的这一行$("div").click(myfunc($(this)));是关键错误:

  • 你直接调用了myfunc($(this)),而不是把函数本身作为点击事件的回调函数。这意味着页面加载完成(ready函数执行)的时候,myfunc就立刻运行了,而不是等到你点击div的时候才触发。
  • 另外,这里的$(this)在ready函数里指向的是document对象,不是你要点击的div,所以第一次执行myfunc的时候,其实是在修改document的文本,你根本看不到这个变化;而真正点击div的时候,因为没有绑定有效的回调函数,所以完全没反应。

怎么修复?

有两种简单的修复方式,看你需求选:

方式一:直接绑定函数,利用this获取当前元素

把函数本身传给click方法,jQuery会在点击时自动把当前点击的元素作为this传入函数:

$(function(){ 
  function myfunc(){ 
    // 这里的this就是被点击的div元素
    $(this).text("You clicked ..!"); 
  } 
  // 直接传函数名,不要加括号调用
  $("div").click(myfunc); 
})

方式二:用匿名函数包裹,传递自定义参数

如果你需要给myfunc传递特定参数,可以用匿名函数作为回调,在里面调用myfunc并传入元素:

$(function(){ 
  function myfunc($el){ 
    $el.text("You clicked ..!"); 
  } 
  $("div").click(function(){
    // 这里的this是被点击的div,转成jQuery对象传给myfunc
    myfunc($(this));
  }); 
})

这样修改之后,点击div的时候就能正常触发函数,把文本改成"You clicked ..!"啦!

内容的提问来源于stack exchange,提问作者Martin AJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:22:17