【问题标题】:jQuery functions not working when called on eventjQuery函数在事件上调用时不起作用
【发布时间】:2017-05-19 00:16:07
【问题描述】:

我有一个使用 jQuery 和 Bootstrap 的页面。一切正常,但由于某种原因,当我在事件上调用函数时,控制台会显示$(...).function is not a function。例如,如果我有这个:

<script>
    $("#myModal").modal('show');
</script>

它工作正常,并且在您加载页面后立即显示模式。但是,如果我尝试这样称呼它:

<script>
    $("#myTrigger").click(function(e){
        e.preventDefault();
        $("#myModal").modal('show');
    });
</script>

它不起作用,控制台给出了这个错误:

$(...).modal 不是函数

有什么想法吗?

编辑:

<script>
    $(document).ready(function(){
        $("#myModal").modal('show');
    });
</script>

工作正常,但又一次,

<script>
    $(document).ready(function(){
        $("#myTrigger").click(function(e){
            e.preventDefault();
            alert("test); // Does alert
            $("#myModal").modal('show'); // Doesn't work
        });
    });
</script>

...没有。由于警报有效,可以肯定地说触发器确实存在并且点击事件被正确调用。我正在使用其他几个框架,一个 WYSIWYG 编辑器和 uploadify。这可能是冲突错误吗?起初我不这么认为,因为两个案件都是在一个接一个的案件中审理的,所以如果发生冲突,这两个案子都不会起作用,对吧?

更新:

看起来这是一个非常奇怪的冲突问题。我尝试了以下方法:

var bootstrapModal = $.fn.modal.noConflict();
$.fn.bModal = bootstrapModal; // established outside the click event

$("#myTrigger").click(function(e){
    e.preventDefault();
    $("#myModal").bModal('show'); // doesn't work
});

我仍然遇到同样的问题。但是,在点击事件内部建立$.fn.bModal,如下:

var bootstrapModal = $.fn.modal.noConflict();

$("#myTrigger").click(function(e){
    e.preventDefault();
    $.fn.bModal = bootstrapModal; // established inside the click event
    $("#myModal").bModal('show'); // works fine
});

工作。仍然无法理解为什么会发生这种情况以及为什么它在 $(document).ready() 上有效,但在 $('#trigger').click() 上无效,也许 Chrome 处理冲突的具体方式也是其中的一部分。无论如何,这会做。感谢所有提供帮助的人。

【问题讨论】:

  • 这很奇怪。如果第一个代码示例有效,那么第二个代码示例也没有理由。您能否在 sn-p 或 fiddle 中展示该问题的工作示例?另外,我假设您在 &lt;/body&gt; 之前执行这些脚本以确保 DOM 已加载,对吗?
  • $( document ).ready() 也许?
  • 看看这个page 这通常是因为 $ 正在被其他脚本(即 Bootstrap)使用。
  • 您确定#myTrigger 存在吗?你能console.log吗?
  • v4-alpha.getbootstrap.com/components/modal/#events 如我所见,根本不需要点击...

标签: javascript jquery twitter-bootstrap


【解决方案1】:

您是否尝试将代码包装在一个

$(document).ready(function(){
// your code
});

【讨论】:

  • 如果这是第一个代码示例也不会起作用的问题。
  • 与他运行这段代码的位置相比,这不取决于他加载 jQuery 和 Bootstrap 的位置吗?
  • 是的,但如果第一个示例有效,则设置必须正确
【解决方案2】:

我已经试过你的 sn-p 代码,然后我发现了同样的问题$(...).modal is not a function.. 那为什么?

其中一个原因是jquery 没有放在bootstrap 的源之前。

这是错误的:

<script src="/static/js/bootstrap.min.js"></script>
<script src="/static/js/jquery.min.js"></script>

这是正确的:

<script src="/static/js/jquery.min.js"></script>
<script src="/static/js/bootstrap.min.js"></script>

查看此演示:https://jsfiddle.net/agaust/fmyoc5zx/


但是,如果说第三方插件,也许可以用jQuery.noConflict处理

【讨论】:

    【解决方案3】:

    从 getbootstrap.com 测试了这个复制/粘贴演示。一切正常。你一定有冲突的问题。 IMO jquery 或引导脚本与其他脚本发生冲突。

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link href="css/bootstrap.min.css" rel="stylesheet">
      </head>
      <body>
        <a href="#" class="btn btn-primary btn-lg" id="myTrigger">
          Launch demo modal
        </a>
        <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
          <div class="modal-dialog" role="document">
            <div class="modal-content">
              <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                <h4 class="modal-title" id="myModalLabel">Modal title</h4>
              </div>
              <div class="modal-body">
                ...
              </div>
              <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Save changes</button>
              </div>
            </div>
          </div>
        </div>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="js/bootstrap.min.js"></script>
        <script>
            $(document).ready(function(){
                $("#myTrigger").click(function(e){
                    e.preventDefault();
                    $("#myModal").modal('show'); // Does WORK
                });
            });
        </script>
      </body>
    </html>
    

    【讨论】:

    • 是的,确实是冲突问题。
    【解决方案4】:

    这真的很奇怪...试试不带 preventDefault() fn。像这样:

    <script>
        $("#myTrigger").click(function(){
            $("#myModal").modal('show');
            return false;
        });
    </script>
    

    【讨论】:

    【解决方案5】:

    我认为问题在于当您进入页面时调用了该函数,但尚未加载它的文档。 所以试试这个:

    $(document).ready(function(){                          
    $("#myTrigger").click(function(e){
      e.preventDefault();
      $("#myModal").modal('show');
    });
    }
    

    另一种方法是在您的HTML 标记中设置onClick="functionname()",ID 为myTrigger。然后像这样声明函数:

    function functionname()
    {
     //Code
    }
    

    而且你不需要 $(document).ready();

    你可以在这个链接中看到同样的问题:jquery - is not a function error

    【讨论】:

    • 如果这是第一个代码示例也不会起作用的问题。
    • @RoryMcCrossan 但它不同,因为您正在使用函数
    • 如果您指的是使用onclick 进行的编辑,这是有可能的,但这是代码标准的倒退。 OP 使用的方法是最好的,并且根据他们展示的示例应该可以正常工作。这里肯定还有另一个根本问题。
    • @RoryMcCrossan 不,我指的是第一个示例
    • 好的,但正如我之前所说,如果问题是 DOM 尚未准备好,那么 OP 显示的第一个示例也将不起作用。
    【解决方案6】:

    我认为有一个脚本可以用纯 jquery 覆盖您的 $ 函数。我有一个类似的问题,问题是包含 jquery 库的第三方插件。每个自定义 jquery 代码都可以正常工作,但插件调用会导致 javascript 错误。看看你的第三方的东西和你的脚本标签的顺序。

    【讨论】:

      【解决方案7】:

      您的警报代码中有一个错误(缺少引号),这会阻止模态显示试试这个:

      <script>
          $(document).ready(function(){
              $("#myTrigger").click(function(e){
                  e.preventDefault();
                  alert("test"); // Does alert
                  $("#myModal").modal('show'); // should work
              });
          });
      </script>
      

      【讨论】:

      • 这里写的时候打错了。原来这是一个奇怪的冲突问题。
      猜你喜欢
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      相关资源
      最近更新 更多