jQuery报错Uncaught TypeError: $(...).editRule不是函数求助
解决Uncaught TypeError: $(...).editRule is not a function的问题
这个错误的核心原因很明确:你定义的editRule是一个普通独立函数,但你却试图把它当作jQuery对象的内置方法来调用(也就是$(selector).editRule()这种形式)——jQuery原型上根本没有这个方法,所以浏览器会报错说它不是一个函数。
下面给你两种针对性的解决方案,根据你的实际需求选择:
方案1:直接调用普通函数(简单快速)
如果editRule只需要处理特定元素,不需要复用在多个jQuery对象上,直接把需要操作的元素作为参数传给函数就行:
function functionName(){ // [...] // 建议用off()替代旧的unbind(),jQuery 3.0+更推荐 $(`#index`).off('click').click(() => { // 直接调用editRule,把规则和目标元素传进去 editRule(rule, $('#index')); }); } // 接收规则和要操作的jQuery对象作为参数 function editRule(rule, $targetElement) { // 在这里可以用$targetElement操作DOM,比如: // $targetElement.text('修改后的内容'); // do sth with the rule }
方案2:封装成jQuery插件(适合复用)
如果你需要在多个不同的jQuery对象上调用editRule,可以把它扩展成jQuery的插件方法,这样就能用$(selector).editRule()的形式调用了:
// 扩展jQuery的原型,添加自定义方法 $.fn.editRule = function(rule) { // this代表当前的jQuery对象,用each遍历处理每个匹配的元素 this.each(function() { const $element = $(this); // 在这里编写你的逻辑,比如根据rule修改$element // 示例:$element.data('rule', rule); }); return this; // 返回this,保持jQuery链式调用的特性 }; function functionName(){ // [...] $(`#index`).off('click').click(() => { // 现在可以直接通过jQuery对象调用editRule了 $(`#index`).editRule(rule); }); }
额外注意事项
- 确保
editRule的定义在调用它的代码之前,如果是用函数表达式(比如const editRule = function() {}),更要注意作用域和定义顺序,避免出现“未定义”的问题。 - 你用到的
unbind()是jQuery的旧方法,从jQuery 3.0开始官方推荐使用off()来移除事件绑定,兼容性和稳定性更好。
内容的提问来源于stack exchange,提问作者Hi_its_me
相关产品推荐
相关产品推荐

