调用事件时jQuery函数不起作用

时间:2017-01-04 16:08:55

标签: javascript jquery twitter-bootstrap

我有一个使用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>

...没有按&#39;吨。由于警报有效,因此可以肯定地说触发器确实存在并且正确调用了click事件。我正在使用其他几个框架,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
});

我仍然遇到同样的问题。但是,在click事件中建立$.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处理冲突的具体方式也是其中的一部分。无论如何,这样做。感谢所有帮助过的人。

7 个答案:

答案 0 :(得分:1)

您是否尝试将代码包装在

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

答案 1 :(得分:1)

我已经尝试过您的代码段,然后我发现了同样的问题$(...).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

答案 2 :(得分:0)

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

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

另一种方法是使用ID myTrigger在HTML标记中设置onClick="functionname()"。然后声明函数如:

function functionname()
{
 //Code
}

你不需要$(文件).ready();

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

答案 3 :(得分:0)

真的很奇怪......尝试使用preventDefault()fn。像这样:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

从getbootstrap.com测试了此复制/粘贴演示。一切正常。你必须遇到冲突问题。 IMO jquery或bootstrap脚本与其他脚本冲突。

<!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>