【问题标题】:jQuery Date Picker Not Working In IEjQuery 日期选择器在 IE 中不起作用
【发布时间】:2018-04-16 16:35:32
【问题描述】:

我正在尝试让 jQuery UI 日期选择器通过 php 在 IE 中工作。我用 div 做了他们的基本示例,它甚至在 IE 中也可以工作。但是,尝试将其应用于我的代码适用于 Chrome 和 Firefox,但不适用于 IE。运行 IE 11。这只是日期选择器的核心部分:

echo"   <link rel=\"stylesheet\" href=\"//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css\"> \n";
echo " <script src=\"https://code.jquery.com/jquery-1.12.4.js\"></script>";
echo " <script src=\"https://code.jquery.com/ui/1.12.1/jquery-ui.js\"></script>";
echo " <script>";
echo " $( function() {";
echo " $( \"#datepicker\" ).datepicker();";
echo " } ); ";


echo " $( function() {";
echo " $( \"#datepicker1\" ).datepicker();";
echo " } ); ";
echo " </script> ";


echo "<tr>                                                          \n";
    echo "<td>                                                                      \n";
        echo " <form action=\"Web.php\" method=\"post\">                            \n";
        if(!empty($_POST["datefrom"]))
            $datefr = $_POST['datefrom'];
        echo "  <b>Date From: (ex: 7/12/2017):</b> <input type=\"text\" id=\"datepicker\" name=\"datefrom\" value=\"$datefr\" >\n";
    echo "</td>                                                                     \n";
    echo "<td>                                                                      \n";
        if(!empty($_POST["dateto"]))
            $dateto = $_POST['dateto'];
        echo "  <b>Date To:   (ex: 7/12/2017):</b> <input type=\"text\" id=\"datepicker1\" name=\"dateto\" value=\"$dateto\" >\n";
    echo "</td>                                                                     \n";
    echo "<td>                                                                      \n";
    echo "</td>                                                                     \n";
echo "</tr>                                                                         \n";

它在 Chrome 和 Firefox 中运行良好。但在 IE 中,我只有输入日期的字段,没有日期选择器。我用了这个例子:

Datepicker jQuery UI

我不确定 IE 是否不喜欢特定的东西。我确实在桌子上有一些样式。我接下来要尝试的是将所有样式注释掉,然后看看它是否会出现。

希望有人能立即发现它。

我能够进行检查并发现此错误 - “SCRIPT5007:属性 '$' 的值为 null 或未定义,不是函数对象”,它指向:

  $( function() { $( "#datepicker" ).datepicker(); } );

我不能发布所有渲染的 HTML,因为我必须清理一堆。这是 jQuery UI 和 datepicker 部分的部分

  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css"> 
 <script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
 <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> 
 <script> 
    $( function() { $( "#datepicker" ).datepicker(); } );  $( function() { $( "#datepicker1" ).datepicker(); } ); 
 </script>

 <td>                                                                       
 <form action="Web.php" method="post">          
    <b>Date From: (ex: 7/12/2017):</b> <input type="text" id="datepicker" name="datefrom" value="" >
</td>                                                                       
<td>                                                                        
    <b>Date To:   (ex: 7/12/2017):</b> <input type="text" id="datepicker1" name="dateto" value="" >
</td>                                                                       

【问题讨论】:

  • 发布呈现的 HTML,而不是您问题中的 PHP。还要在浏览器的控制台中添加任何错误。
  • 在旁注中,您可以通过关闭 PHP 标记然后使用 HTML 在 PHP 文件中使用常规 html。当你想使用 PHP 时,只需通过 插入它。这样可能看起来更整洁一些,您可以使用 HTML 的默认 \n 而不是自己输入。现在,回答你的问题。 IE 的一切都很糟糕,所以我个人只是不关心使用它的人,但是当客户强迫我关心时,我喜欢使用一种叫做 polyfill 的东西。它将处理对大量功能的跨浏览器支持。 github.com/chemerisuk/better-dateinput-polyfill
  • 例如,这个 polyfill 可以让你插入参数来决定元素应该如何响应。 data-polyfill 允许您决定哪些设备应该使用 polyfill。这样做的好处是,您可以立即为所有设备和浏览器实现所需的功能,而该设备支持 IE 8+。其他的也很好:)

标签: php jquery-ui datepicker internet-explorer-11


【解决方案1】:

请使用控制台日志或错误报告更新您的帖子,了解您使用 IE 时发生的情况。我可以在 Windows 10 上使用 IE 并为 jQuery UI 加载 datepicker()。这是 jQuery 的一大优势——它适用于很多浏览器。也就是说,旧版本的 IE 可能无法使用它。一方面,您可以在现代浏览器中使用 type="date",并恢复为旧式核心 JS 以弹出日期框。或者,使用 polyfill。至少,除非您使用的是非常旧的 IE 版本,否则这段代码应该可以正常工作……至少它可以在我的 IE 上运行。

<!-- SCRIPT SRC INCLUDES HERE --> 

<input type="text" id="anythingYouWantHere" class="customDatepickerClass">
<input type="text" id="anythingYouWantHere2" class="customDatepickerClass">
<input type="date" id="defaultHTML5">

<script>
 $(document).on('ready', function(){
  $(".customDatepickerClass").datepicker(); // initialize all datepickers at once
 }); 
</script>

【讨论】:

  • 我最初将它设置为 type=date。它适用于 Chrome 和 Firefox,但不适用于 IE。由于公司强制大多数人使用 IE,我试图为所有浏览器修复它。如果我仍然挂断电话,我可能会尝试您的代码。我使用过 jQuery,但在完全不同的环境中。谢谢
【解决方案2】:

这是我们公司的软件问题。他们正在尝试一些软件来监控我们访问的站点,并且花了一段时间才到达所有浏览器。第一个IE。我认为它阻止了 jQuery 脚本项的加载。无论如何,它现在可以在所有浏览器上运行。一定要爱上这些东西。感谢所有的帮助。

【讨论】:

    【解决方案3】:

    在 JS 中你必须将它包装到一个超时函数中:

    setTimeout(function() { 
         ...
         ...
    }, 600);
    

    当您想在页面加载后使用 jQuery 调整 DOM 时,这在许多情况下是必要的。页面必须完全加载,否则您将无法在尚不存在的 DOM 树上使用 jQuery 选择器。他们将报告“空”并且您的代码无法在他们身上执行。

    【讨论】:

    • 这个答案和你之前发的this answer一模一样。
    猜你喜欢
    • 1970-01-01
    • 2011-05-29
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2015-12-31
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多