当前位置: 首页 > 面试题库 >

Ajax刷新后如何绑定jQuery Datepicker?

蒙墨竹
2023-03-14
问题内容

我有一个对我来说很棒的jQuery datepicker,除了当我通过ajax刷新内容时,我丢失了datepicker。据我所知,我应该使用jQuery
on()将其绑定到输入,但是我似乎找不到合适的事件将其绑定到输入。

第一次有效,但在随后的刷新中无效:

$("[id^=startPicker]").datetimepicker({
        showOn: "button",
        buttonImage: "/img/calendar_icon.png",
        buttonImageOnly: true,
        dateFormat: 'mm/dd/yy',
        timeFormat: 'hh:mm tt',
        stepMinute: 1,
        onClose: function (dateText, inst) {

            var selectedDate = $(this).datepicker("getDate"); //Date object

            $.ajax({
                url: "/url",
                dataType: "json",
                method: 'post',
                data: {
                    value: selectedDate.toDateString() + ' ' + selectedDate.toTimeString()
                },
                beforeSend: function () {
                    $("#loading").fadeIn();
                },
                success: function (data, textStatus) {
                    $("#content").html(data);
                },
                complete: function () {
                    $("#loading").fadeOut();
                }
            });
        }
    });

第一次或后续刷新时不绑定:

$('#content').on('ready', "[id^=startPicker]", function () {
        $(this).datetimepicker({
            showOn: "button",
            buttonImage: "/img/calendar_icon.png",
            buttonImageOnly: true,
            dateFormat: 'mm/dd/yy',
            timeFormat: 'hh:mm tt',
            stepMinute: 1,
            onClose: function (dateText, inst) {

                var selectedDate = $(this).datepicker("getDate"); //Date object

                $.ajax({
                    url: "/url",
                    dataType: "json",
                    method: 'post',
                    data: {
                        value: selectedDate.toDateString() + ' ' + selectedDate.toTimeString()
                    },
                    beforeSend: function () {
                        $("#loading").fadeIn();
                    },
                    success: function (data, textStatus) {
                        $("#content").html(data);
                    },
                    complete: function () {
                        $("#loading").fadeOut();
                    }
                });
            }
        });
    });

问题答案:

jQuery .on()函数用于延迟事件处理,但不适用于插件初始化。

它适用于事件,因为DOM模型将事件从DOM元素传播到其父元素,一直到顶部。因此,当您单击链接时,您还将同时单击包含该链接的任何内容(div例如a),包含该容器的所有内容,等等,一直到body标记,最后是标签document本身。
.on()通过绑定到公共父元素而不是动态子元素的click事件来利用此优势,因此可以添加/删除子元素而不会丢失父元素上的事件处理程序。

不过,插件初始化无法以这种方式工作。为了在目标元素上初始化插件, 必须
在元素本身上完成,这意味着该元素当时必须位于DOM中。因此,当您动态添加新元素时,您需要定位这些新元素并在其上初始化插件。因此,您success需要通过AJAX调用来执行此功能。

注意,由于您的AJAX调用本身 内部 的初始化,你将需要分割其中的一些分成不同的功能进行再利用。否则,此重新初始化将无限期地嵌套在其内部。

也许是这样的:

var datePickerClose = function (dateText, inst) {

    var selectedDate = $(this).datepicker("getDate"); //Date object

    $.ajax({
        url: "/url",
        dataType: "json",
        method: 'post',
        data: {
            value: selectedDate.toDateString() + ' ' + selectedDate.toTimeString()
        },
        beforeSend: function () {
            $("#loading").fadeIn();
        },
        success: function (data, textStatus) {
            $("#content").html(data);
            $("#content").find("[id^=startPicker]").each(function () {
                bindDatePicker(this);
            });
        },
        complete: function () {
            $("#loading").fadeOut();
        }
    });
};

var bindDatePicker = function(element) {
    $(element).datetimepicker({
        showOn: "button",
        buttonImage: "/img/calendar_icon.png",
        buttonImageOnly: true,
        dateFormat: 'mm/dd/yy',
        timeFormat: 'hh:mm tt',
        stepMinute: 1,
        onClose: datePickerClose
    });
};

$("[id^=startPicker]").each(function() {
    bindDatePicker(this);
});

当然,这只是徒手的未经测试的代码,目的只是为了演示该概念。这可能需要一些调整,并且可能会有更优雅的方法来实现相同的逻辑。



 类似资料:
  • 问题内容: 在ajax调用后,我无法停止刷新页面。我已经尝试通过放置e.preventDefault(); 并返回false;同样,但我的页面再次刷新。 我不知道代码或某些问题是什么。请帮助我在ajax调用后停止刷新页面。解决这个问题将对我有很大的帮助。提前致谢。 这是我的代码: 问题答案: ID是否指向表单?如果是,则需要侦听Submit事件而不是单击click。如果您确实需要监听click事件

  • 问题内容: 好的,我有一个仅包含的简单表格。当我们点击submit(通过ajax存储)时,在文本字段中写入的数据将存储在DB中。Ajax可以正常工作并提交数据,但是,页面会自动刷新,并且URL包含输入字段的内容。 我的表格: 阿贾克斯:- PHP的:- 结果显示在后,页面将刷新,URL变为: -chat.php?message = 454545&submit_message = 为什么要刷新页面?

  • 问题内容: 他目前正在研究必须过滤表中数据的代码。Ajax将调用该链接并获取带有答案的响应(json)结果。但是,我遇到了一个问题。我必须以某种方式呈现表,并且我不想通过append等来执行此操作。 我可以以某种方式再次生成视图或刀片文件吗? 默认视图是DefController @ index,但是ajax使用url,而该控制器是DefController @ gettabledata。 问题答

  • 问题内容: 我正在开发一个新项目http://www.hotwirerevealed.com,该项目可以在hotwire.com上显示/识别酒店。输入状态和目的地后,我有了一个使用jquery的.post方法发布的javascript函数。发布请求转到输出html的php页面,我使用jquery的html方法将内容放置在页面上。 像这样 我有超链接,指向要在灯箱中使用的酒店 我试图使用jQuery

  • 问题内容: 我正在尝试使AJAX函数更新约30秒。我已经完成了一个简单的版本,下面是代码。 这有效,但是,当该函数被首次调用时,我不希望它等待30秒,我只希望该函数调用,然后等待30秒,再次调用,等待30秒,再次调用,等等。有什么帮助吗? 问题答案: 考虑改用-更可靠。 当窗口没有焦点时,计时器可以堆叠,然后在再次获得焦点时,所有计时器立即运行。使用还会确保如果第一个请求由于某种原因阻塞,则不会导

  • 问题内容: 我有一个包含许多ListView的页面,我希望用户能够对它们进行排序和翻页。我不想每次都回发并重新绑定整个页面,而是希望通过jQuery / AJAX有选择地针对所涉及的控件进行操作。我很容易在页面中对WebMethod进行客户端调用- 我的问题是如何通过jQuery将返回的数据返回到ListView中? (注意:我不想使用UpdatePanel!) 问题答案: 我不确定仅由于List