jQuery元素只有在页面刷新后才能正常工作。

4

我正在构建一个基于React的应用程序,页面上有一些jQuery元素,例如JqueryUI日期选择器和Bootstrap工具提示。

问题在于这些元素在第一次加载时不起作用,需要重新加载页面。

所以就像是jQuery脚本在第一次加载时没有被加载。

我已经查看了控制台,没有看到任何与jQuery / javascript相关的错误。

任何帮助都将不胜感激。 这是我的index.html页面:

<!doctype html>
<html class="no-js" lang="">
  <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="description" content="">
      <meta name="viewport" content="width=device-width">

      <title>ICETEA</title>

      <!-- Latest compiled and minified JavaScript -->
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>

      <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>

      <!-- JQuery UI JS - Used for the datepicker -->
      <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

      <!-- Bootstrap theme -->
      <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">

      <link rel="stylesheet" href="/css/main.css">
      <!-- JQuery UI CSS - Theme: Blitzer, used for the datepicker -->
      <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/blitzer/jquery-ui.css">

  </head>
  <body>

    <div id="app"></div>

    <script src="/js/main.js"></script>

    <script>
      $(document).ready(function(){
          $('[data-toggle="tooltip"]').tooltip();
      });
    </script>

    <script>
      $(function() {
        $( "#datepicker" ).datepicker();
        $( "#datepicker" ).change(function() {
          $( "#datepicker" ).datepicker( "option", "dateFormat", "DD d MM" );
        });
      });
    </script>

  </body>
</html>

1
将函数设置在 .ready() 内部。 - Baruch
@Baruch - 他们的 $(function(){...}) 相当于 $(document).ready(function(){...}) - Jamiec
1
在任何其他脚本之前(现在是在Bootstrap JS之后),您需要先加载jQuery。首先> https://code.jquery.com/jquery-2.1.3.min.js - vanburen
1个回答

2
可能发生的情况是,您的初始页面加载尝试从网络加载所有内容,而第二次加载则从浏览器缓存中检索资产。您可以通过使用开发人员工具始终不使用缓存来验证此操作;如果我的假设是正确的,那么即使重新加载页面,您也会看到错误更加普遍。
正如@vanburen在他们的评论中指出的那样,可能的解释是您没有正确排序脚本。jQuery应该始终首先加载,但现在您将其放在Bootstrap之后。这得到了控制台错误的支持,当您尝试使用开发人员工具打开页面时,您会看到以下错误:
未捕获的错误:Bootstrap的JavaScript需要jQuery(匿名函数)@bootstrap.min.js:6
作为额外的优化,您可以考虑将CSS放在同步脚本之前,以便浏览器可以在同时加载JavaScript时进行加载和解析。
底线:一定要熟悉您的开发人员工具。当您面对意外行为时,它们应该始终是您的第一个资源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接