jquery-ui - 如何解决 jQuery UI 和 jQuery 的冲突?日期选择器给出错误

标签 jquery-ui datepicker jquery

我尝试在使用 jQuery 1.3.2 的网站上使用 jQuery 日期选择器作为表单,但它不起作用。我必须引用更新的 jQuery 库来实现我的一些表单功能,并且还必须引用 jQuery ui 来让日期选择器正常工作。我已将 noConflict 用于较新的 jquery 库,但它仍然无法正常工作。我在控制台中收到 Uncaught TypeError: Cannot read property 'document' of null 。无法更新/删除 1.3.2 引用。

这是我的 fiddle ,可以用。但我在 Chrome(不是 FF)中收到上述错误,并且日期选择器无法在我的网站上运行。 http://jsfiddle.net/pnA33/

有人可以帮忙吗?它可以在本地运行,但不能在服务器上运行(这是一个开发环境,所以我无法共享链接)。 I found this但由于我对 jQuery 比较陌生,这超出了我的能力范围。

jQuery:

            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
            <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>
            <script type="text/javascript">
            var jQuery_1_9_1 = jQuery.noConflict(true);
            jQuery_1_9_1(document).ready(function() {
            jQuery_1_9_1( "#datepicker" ).datepicker({ minDate: -1, maxDate: "+24D" });
            jQuery_1_9_1('#pancettaForm').change(function () {
                       jQuery_1_9_1('.address,#new-ship-date').hide();
                       if (jQuery_1_9_1('#ship-address').prop('checked')) {
                          jQuery_1_9_1('.address').show();
                       }
                       else if (jQuery_1_9_1('#ship-date').prop('checked')) {
                          jQuery_1_9_1('#new-ship-date').show();
                       }
                       else if (jQuery_1_9_1('#ship-both').prop('checked')) {
                          jQuery_1_9_1('.address, #new-ship-date').show();
                       }
                    });

            });

            function validateForm()
            {
            var x=document.forms["pancettaForm"]["order-number"].value;
            if (x==null || x=="")
            {
            alert("Please provide your order number from the confirmation email sent immediately after placing your order.");
            return false;
            }

            }
            </script> 

HTML:

        <form name="pancettaForm" method="post" action="http://lizlantz.com/lcform.php" id="pancettaForm" onsubmit="return validateForm()">
                <input type="hidden" value="Pancetta Order Update" name="subject"> 
                <input type="hidden" value="cookware/partners_10151_-1_20002" name="redirect">
                <ol>
                    <li>
                    <label for="update-ship">I'd like to:</label> 
                        <input id="ship-address" name="update-ship" type="radio" value="update-ship-address"/> Have pancetta shipped to a different address than my skillet<br />
                        <input id="ship-date" name="update-ship" type="radio" value="update-ship-date" /> Have pancetta shipped sooner than June 14, 2013 <br />
                        <input id="ship-both" name="update-ship" type="radio" value="update-both" /> Make changes to both the shipping address and shipping date
                    </li>
                    <li>                
                    <label for="order-number"><em>*</em>Order Number (available in order confirmation email):</label> 
                        <input type="text" name="order-number">
                    </li>             
                    <li>                
                    <label for="full-name"><em>*</em>Recipient Full Name:</label> 
                        <input type="text" name="full-name">
                    </li>   
                    <li class="address" style="display: none;">
                        <label for="address">
                            <em>*</em>Address
                        </label> 
                        <input type="text" name="address">
                        <label for="address2">
                            Address Line 2
                        </label> 
                        <input type="text" name="address2">
                    </li>
                    <li class="address" style="display: none;">
                        <label for="city">
                            <em>*</em>City
                        </label> 
                        <input type="text" name="city">
                        <label for="state">
                            <em>*</em>State
                        </label> 
                        <select name="state">
                            <option value="AL">Alabama</option>
                            <option value="AK">Alaska</option>
                        </select>
                        <label for="zip">
                            <em>*</em>Zip Code
                        </label> 
                        <input type="text" name="zip">
                    </li>
                    <li id="new-ship-date"  style="display: none;">
                        <em>*</em><label for="updated-ship-date">New Ship Date:</label>
                        <input type="text" id="datepicker" name="updated-ship-date" value="Update Your Ship Date" />
                    </li>            
                    <li>
                        <label for="phone">
                            <em>*</em>Phone (for delivery questions)
                        </label> 
                        <input type="text" name="phone">
                    </li>               
                </ol>
                       <input type="submit" id="button" name="submit"  value="Update Pancetta">

              </form>

最佳答案

啊哈!实际上,您无法同时在同一个文档实例上运行两个版本的 jQuery...因此出现了这里的问题。该解决方案直接来自 Splendìd Angst 在该帖子中的回答 Can I use multiple versions of jQuery on the same page?

基本上,您必须在进入文档“主循环”之前声明您的无冲突版本,我想您可以称之为它。

在 document.ready 调用之外声明您的 noConflict 变量...使用标准 $(document).ready() 语法,然后在就绪闭包中使用(且仅使用)您的 noConflict 变量。应该可以了。

我还没有测试过这个想法,但它是有道理的,并且不需要你对代码进行太多调整来尝试它。

关于 jQuery 的一些新东西:)

关于jquery-ui - 如何解决 jQuery UI 和 jQuery 的冲突?日期选择器给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16325715/

相关文章:

jquery - 在 jsFiddle 中使用 jQuery 主题 (CSS)

javascript - JQuery slider 不工作?

javascript - jQuery UI 日期选择器到纪元

JavaScript 在浏览器中粘贴 url

JQuery UI 自动完成,选择后的值(通过鼠标)与(通过箭头键)不同

php - jQuery UI Sortable,然后将订单写入数据库

javascript - jquery datepicker 验证返回分配大小过载错误

datepicker - 在 Materialise 框架的日期选择器中禁用 future 日期

jquery - 使用 'clone' 助手执行可拖动事件后,如何删除原始元素?

jquery - IE 的 CSS3 动画旋转器解决方法