奇怪的重定向错误

Weird redirection error

本文关键字:错误 重定向      更新时间:2023-09-26

我有一个jQuery日期选择器。我写了一个函数,当用户点击日期时,它会添加一个URL参数(日期)。如果设置了日期,我希望使用日期选择器的setDate方法将日期设置为URL参数。如果未设置,将使用今天的日期。我已经完成了从URL获取日期的操作,但日期选择器的日期尚未设置。奇怪的是,如果我只是手动将?date=xxxxx添加到url中,它就可以完美地工作。因此,当我尝试使用onSelect 进行重定向时,就会发生这种情况

页面可在此处查看。

可以查看此页面以查看手动添加参数的效果。

它与重定向无关。这与你页面上事件的顺序有关。在不起作用的页面上,您在$(function () {})中进行了.datepicker初始化,这意味着它将在DOM就绪时运行(在Javascript的其余部分之后)。这只是绑定一个事件。然后,在绑定事件之后,立即尝试调用.datepicker("setDate",qs_date)。但您不能这样做,因为您的日期选择器尚未初始化,因为$(function() {})中的函数尚未执行。你应该使用这个代码:

$(function() {
    $("#datepicker").datepicker({
        onSelect: function(date, picker){ 
            var url = "http://wwwdev.cco.purdue.edu/asp/Calendar/matt_test.asp?date=" + date;
            window.location = url;
        }
    });
    var qs_date = location.href.match(/[?&]date=([^&#]+)/); 
    if (qs_date){
        qs_date = qs_date[1];
        alert(qs_date);
        $("#datepicker").datepicker("setDate",qs_date);
    }
});

在工作示例中,您不使用$(function () {}),因此会立即初始化日期选择器,然后根据查询字符串设置日期。上面的代码有效地做了同样的事情,只是从技术上讲,它可以放在页面上的任何地方。处理DOM的内联Javascript需要在DOM渲染后运行。这就是工作示例工作的原因,也是$(function () {})所保证的。

我相信有一种更好的方法可以通过它的初始化选项在日期选择器上初始设置日期,但我提供的应该做同样的事情,只是有点不必要。

更新:

认为defaultDate选项允许您在初始化中设置初始日期-http://api.jqueryui.com/datepicker/#option-defaultDate

所以你可以使用:

$(function() {
    var qs_date = location.href.match(/[?&]date=([^&#]+)/);
    if (qs_date) {
        qs_date = qs_date[1];
        //alert(qs_date);
    }
    $("#datepicker").datepicker({
        defaultDate: qs_date,
        onSelect: function(date, picker){ 
            var url = "http://wwwdev.cco.purdue.edu/asp/Calendar/matt_test.asp?date=" + date;
            window.location = url;
        }
    });
});

它应该是完美的,因为如果qs_datenull(查询字符串中没有匹配项),那么将defaultDate值设置为null与省略它(它的默认值)并将日期设置为今天是一样的。因此,只有查询字符串中有匹配项,默认日期才会从今天起更改。