【发布时间】: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 中展示该问题的工作示例?另外,我假设您在
</body>之前执行这些脚本以确保 DOM 已加载,对吗? -
$( document ).ready() 也许?
-
看看这个page 这通常是因为 $ 正在被其他脚本(即 Bootstrap)使用。
-
您确定#myTrigger 存在吗?你能console.log吗?
-
v4-alpha.getbootstrap.com/components/modal/#events 如我所见,根本不需要点击...
标签: javascript jquery twitter-bootstrap