【问题标题】:Uncaught TypeError: ((x.event.special[i.origType] || (intermediate value)).handle || i.handler).apply is not a function未捕获的 TypeError: ((x.event.special[i.origType] || (intermediate value)).handle || i.handler).apply 不是函数
【发布时间】:2015-08-26 15:42:27
【问题描述】:

请帮助我。这是我在 ASP.NET MVC 中使用 jQuery 时出现的错误。

未捕获的 TypeError: ((x.event.special[i.origType] || (intermediate 值)).句柄 || i.handler).apply 不是函数未捕获 TypeError: ((x.event.special[i.origType] || (中间 值)).句柄 || i.handler).apply 不是函数

导致这种情况的代码是:

$('#btnClick').click(function(){   //code })

【问题讨论】:

  • 当您不使用缩小的 JQuery 时会这样做吗?即使点击回调函数刚刚返回,它也会这样做吗?
  • 现在可能帮助不大,但是我发现有人签入了一个不完整的点击事件:`$('body').on('click','.button') 我删除了违规代码,一切都很好!
  • 检查您是否正在调用click 事件处理程序中的任何undefined 函数

标签: jquery asp.net-mvc


【解决方案1】:

在我的情况下,错误是由将事件绑定到不存在的函数引起的。我删除了我不知道绑定到事件的函数。

见下面的sn-p:

var foo = {
  bar1: function(){
    alert('working');
  }
};

// Working
$('body').on('click', '.my-button', foo.bar1);

// Not Working because bar2 doesn't exist
$('body').on('click', '.my-button', foo.bar2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="my-button">Click me</span>

它将产生:

Uncaught TypeError: ((n.event.special[g.origType] || (intermediate 值)).句柄 || g.handler).apply 不是函数

【讨论】:

  • 对我来说也是如此,即使缺少函数的绑定是针对不同目标的(即 .'my-button2')。
  • 这救了我的理智! :)
  • 感谢您引导我了解我的情况,即当我没有将所有内容包装在 $(document).ready 中时,我正在绑定到在我的 JS 文件中进一步声明的函数,因此它们尚未初始化。跨度>
【解决方案2】:

如果这对任何人都有帮助,这也可能是因为一个事件处理函数被声明了两次。

我的一个同事将事件编码为“开启”两次,我解决了(顺便说一句傻瓜挑战)。

例如,如果您输入错误:

$(document).on('change', '#selectInput').on('change', '#selectInput', function () {});

必须是:

$(document).off('change', '#selectInput').on('change', '#selectInput', function () {});

【讨论】:

    【解决方案3】:

    在我的例子中,我输入了

    $('body').click('click','.delete_item',function(e){})
    

    当我打算打字时:

    $('body').on('click','.delete_item',function(e){}) 
    

    click 更改为 on 消除了错误。

    【讨论】:

      【解决方案4】:

      我在一个不再存在的选择器上绑定了一个事件。

      $(document).on('click', '.js-test', App.test);

      我删除了.js-test div 并忘记了。这导致了我的错误。

      【讨论】:

        【解决方案5】:

        我想这有点晚了,但是对于遇到此问题的任何人:检查您的 html 代码是否有多个 jquery 导入。任何额外的导入都可能会弄乱以前注册的句柄/插件/等。

        【讨论】:

          【解决方案6】:

          我最近遇到了同样的问题。我发现这是我在处理 jquery 事件时的错误。而不是

          $('#btnClick').click(function(){   //code })
          

          试试这个,

          $('#btnClick').on('click', function(){   //code })
          

          它对我有用。希望对您有所帮助。

          【讨论】:

          • 这应该没什么区别。前者只是后者的别名。
          • ...嗯,暗示它们是相同的有点危险;当后者适用于选择器的后续实例时。
          • api.jquery.com/click "这个方法是.on('click', handler)的快捷方式"。
          【解决方案7】:

          我得到这个错误的另一种方法是心不在焉地把一个函数放在函数名应该去的地方:

          错误:

          $('.foo').click($('.bar').trigger('click'));
          

          右:

          $('.foo').click(function () {
            $('.bar').trigger('click');
          });
          

          也对:

          $('.foo').click(triggerBarClick);
          
          function triggerBarClick() {
            $('.bar').trigger('click');
          }
          

          【讨论】:

            【解决方案8】:

            在我的情况下,它在 $(document).ready( function() {}) 内声明委托后起作用;

            【讨论】:

              【解决方案9】:

              对我来说唯一的解决办法是在最后返回false

              var button = $('<button>').click(function () {
                  // do something
                  return false;
              });
              

              this question。它与传播有关。

              【讨论】:

                【解决方案10】:

                出现此问题,请尝试添加不存在的 html 对象的侦听器。 如果你的监听器太多,找不到哪个元素不存在,请在美化格式后调试jquery文件。

                在 jquery 文件中,找到 dispatch 函数。在第二维 for 循环语句中添加 OR 运算符和 log t 变量;

                ||控制台.log(t)

                                  for (t.currentTarget = o.elem, i = 0;
                                        (r = o.handlers[i++]) && !t.isImmediatePropagationStopped();)(!t.namespace_re || t.namespace_re.test(r.namespace)) && (t.handleObj = r, t.data = r.data, s = ((p.event.special[r.origType] || {}).handle || r.handler).apply(o.elem, l) || console.log(t), void 0 !== s && (t.result = s) === !1 && (t.preventDefault(), t.stopPropagation()));
                

                读取错误前最后抛出的控制台响应。它有助于查找 html 文档中不存在的元素。

                最后用jquery检查doc中是否存在html obj,问题就解决了。

                            if($('.cartProduct .close-button').length>0)
                               $('.cartProduct .close-button').click(function{
                
                               });
                

                【讨论】:

                  【解决方案11】:

                  对我来说,调整窗口大小时会发生这种情况。我的同事在一个元素上编写了一个调整大小事件,后来他将其删除。因此,稍后在 jQuery 上调整窗口大小时会检查元素,如果找不到则抛出错误。

                  【讨论】:

                    【解决方案12】:

                    在我的情况下,“{passive: true }”导致了问题:

                    $('#defaultSearchbar .dropdown-menu li').on('click', function () {
                         //Something here, not important
                    }, { passive: true });
                    

                    未捕获的 TypeError: ((i.event.special[f.origType] || {}).handle || f.handler).apply 不是函数

                    通过删除它来修复:

                    $('#defaultSearchbar .dropdown-menu li').on('click', function () {
                         //Something here, not important
                    });
                    

                    【讨论】:

                      【解决方案13】:

                      在声明尚不存在的函数时出现相同的错误,即使我没有调用它们只是声明。也许这是你的情况

                      【讨论】:

                      • 这可能只是一个评论:答案应该提供一个可用于“关闭案例”的有效解决方案,而这只是一个提示
                      【解决方案14】:

                      它可能会帮助像我这样的新手粘贴我做错的事情:

                      错误:

                      $(function(){
                      $('#submitButton').click($(function(){
                          ......
                      }));
                      

                      对:

                      $(function(){
                      $('#submitButton').click(function(){
                        .........
                       });
                      

                      请注意,我删除了函数前的 $ 符号。 我是 jQuery 新手,所以我不知道为什么它不起作用。

                      一旦我发现我会更新这个答案。

                      【讨论】:

                        【解决方案15】:

                        将多个事件绑定到单个 ID 或类,或以错误的方式绑定事件都可能导致此问题。

                        就我而言,由于这个错误,我遇到了这个错误:

                        $('body').on('change', '.btnAddNewRow').click(function () {
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2022-01-17
                          • 1970-01-01
                          • 2022-07-22
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多