2017-01-04 8 views
1

У меня есть страница с использованием jQuery и Bootstrap. Все работает нормально, но по какой-то причине, когда я вызываю функцию на событии, консоль говорит $(...).function is not a function. Например, если у меня есть это:Функции jQuery не работают при вызове события

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

Он отлично работает, и модальный показывает, как только вы загрузите страницу. Однако, если я пытаюсь вызвать его, как это:

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

Это не работает, а консоль дает эту ошибку:

$(...).modal is not a function

Любые идеи?

EDIT:

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

... не делает. Так как предупреждение работает, можно с уверенностью сказать, что триггер существует, и событие click вызывается должным образом. Я использую пару других фреймворков, редактор WYSIWYG и загружаю. Это может быть ошибка конфликта? Сначала я так не думал, потому что оба случая подвергаются судебному разбирательству прямо друг за другом, поэтому, если бы был конфликт, это тоже не сработало бы, верно?

UPDATE:

Похоже, это было чертовски странно конфликтным вопросом. Я попробовал следующее:

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 с конфликтами также был его частью. В любом случае, это будет сделано. Спасибо всем, кто помог.

+2

Это странно. Если первый пример кода работает, нет причин, по которым второй не будет. Не могли бы вы показать рабочий пример проблемы в фрагменте или скрипке? Кроме того, я предполагаю, что вы выполняете эти сценарии непосредственно перед '' для обеспечения загрузки DOM, правильно ли это? –

+0

$ (document) .ready() может быть? –

+0

Взгляните на это [страница] (http://stackoverflow.com/questions/33045469/function-is-not-a-function-jquery) Это чаще всего вызвано тем, что $ используется другим скриптом (т.е. Bootstrap). – Loaf

ответ

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> 
+0

Да, конфликт действительно. –

1

Пробовали ли вы оборачивать код в

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

Если это была проблема, первый образец кода тоже не сработал бы. –

+0

Не зависит от того, где он загружает jQuery и Bootstrap по сравнению с тем, где он запускает этот код? –

+0

Да, но если первый образец работает, то установка должна быть правильной –

0

Я думаю, что проблема заключается в том, что функция вызывается при входе на страницу, но документ он еще не загружен. Так попробуйте это:

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

Другой способ сделать это, чтобы установить onClick="functionname()" в вашем HTML-тег с ID MyTrigger. И затем объявите функцию следующим образом:

function functionname() 
{ 
//Code 
} 

И вам не нужно $ (document) .ready();

Вы можете увидеть в этой связи с той же проблемой: jquery - is not a function error

+0

Если это была проблема, первый образец кода тоже не сработал бы. –

+0

@RoryMcCrossan Но это другое, потому что вы работаете с функциями –

+0

Если вы имеете в виду редактирование с помощью 'onclick', это возможность, но это шаг назад в стандартах кода. Метод, который использует OP, является лучшим и должен работать, учитывая образец, который они показали. Здесь должна быть другая основная проблема. –

1
0

Я думаю, что есть сценарий, который переопределяет вашу функцию $ с помощью простого jquery. У меня была аналогичная проблема, и проблема была сторонним плагином с включенной библиотекой jquery. Каждый пользовательский код jquery работает отлично, но вызовы плагинов приводят к ошибке javascript. Посмотрите на свой материал третьей стороны и порядок ваших тегов скриптов.

0

у вас есть ошибка (отсутствует цитата) в вас оповещении код, препятствующие шоу Модальных попробовать это:

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

Это была опечатка при написании здесь. Оказывается, это был странный конфликт. –

 Смежные вопросы

  • Нет связанных вопросов^_^