AJAX响应中的jQuery UI日期选择器

jQuery UI Date Picker in AJAX Response

本文关键字:UI 日期 选择器 jQuery 响应 AJAX      更新时间:2023-09-26

我使用PHP脚本生成一些HTML,其中包括javascript (DatePicker从jQuery UI)。

PHP脚本是使用jQuery/AJAX从主页调用的。我所有的HTML呈现没有问题,但我得到一个控制台错误,说:

Uncaught TypeError: $(…)。Datepicker不是一个函数

我显然做错了什么,但不是一个Javascript专家。如果我直接调用new-fields.php,代码工作得很好,但当我通过jQuery获得它时就会中断。感谢任何帮助!

Main.html:

<script type="text/javascript">
jQuery('input[name="location"]').click(function(){
    var data = {location : jQuery(this).val(), department : $('input[name="department"]:checked').val()};
    jQuery.ajax({
        url: "/new-fields.php",
        type:'POST',
        data: data,
        dataType: 'text',
        success: function(result){
            jQuery('#div-custom').html(result).show();                
            $("#div-custom").find("script").each(function() {
                eval($(this).text());
            });
        }
    });
});
</script>

New-fields.php:

    $picker =  '<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
                <script src="//code.jquery.com/jquery-1.10.2.js"></script>
                <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
                <script>
                  $(function() {
                    $( "#datepicker1" ).datepicker({
                      numberOfMonths: 3,
                      showButtonPanel: true
                    });
                  });
                  </script>
                <script>
                  $(function() {
                    $( "#datepicker2" ).datepicker({
                      numberOfMonths: 3,
                      showButtonPanel: true
                    });
                  });
                  </script>
                  <p>Date: <input type="text" id="datepicker1"></p>
                  <p>Date: <input type="text" id="datepicker2"></p>';
    echo $picker;

您得到一个错误,因为在您的主文档中您使用jQuery,我假设没有冲突的目的,在success处理程序中您使用jQuery$,最后在ajax响应中您再次使用$符号。

我的方法是将javascript移出ajax响应。
将所有.js文件加载到主文档中,从响应中取出所有<script>引用,并丢失eval

像这样修改ajax success处理器

success: function(result){
        jQuery('#div-custom').html(result).show();                
        jQuery("#div-custom").find("#datepicker1,#datepicker2" ).datepicker({
                  numberOfMonths: 3,
                  showButtonPanel: true
        });
}

和你的php文件应该是:

$picker =  '<p>Date: <input type="text" id="datepicker1"></p>
            <p>Date: <input type="text" id="datepicker2"></p>';
echo $picker;