.toggle()隐藏元素,然后将其恢复

时间:2016-08-08 15:41:33

标签: javascript jquery html asp.net

我已经在点击了一个html按钮上写了一个函数,该按钮在服务器上运行'前端的asp标签如下:

<button id="hidePast" runat="server" visible="True"><i class='fa fa-eye-slash'></i> Hide/Show Past Bookings</button>

我希望根据If语句打开和关闭一行。从调试代码开始,它会采用正确的路径来访问.toggle(),但是当它发生时,您可以在回发期间看到屏幕闪烁,并且您可以看到该行消失并设置重新添加。

到目前为止,我已尝试过:

  • e.preventDefault()
  • e.stopImmediatePropagation()
  • 使用隐藏字段更新会话以记住切换状态

到目前为止,这些都没有奏效。 JS代码是:

$(document).on('click','#ctl00_content_hidePast',function (e) {
    e.stopImmediatePropagation();
    var dt = new Date($.now() - 30 * 60000);
    var time = dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds();
    var state = $("#ctl00_content_hdnPastBookingToggle").val();
    $("td.bgtime").each(function() {
         var bookingTime = ($(this).text().split(':'));
         var d = new Date();
         d.setHours(+bookingTime[0]);
         d.setMinutes(bookingTime[1]);

         if ($(d) > time) {
             var timeRow = $(this).parent();
             $(timeRow).toggle();
         };
    });
    if (state === "0") {
       $("#ctl00_content_hdnPastBookingToggle").val("1");
    } 
    else if (state === "1") {
       $("#ctl00_content_hdnPastBookingToggle").val("0");
    };
    return false;
 });
});

1 个答案:

答案 0 :(得分:0)

以下工作最终。

将按钮更改为:

<button id="hidePast" runat="server" onclick="return false;" causesvalidation="false" visible="True"><i class='fa fa-eye-slash'></i> Hide/Show Past Bookings</button>

和JQuery:

$(function togglePast () {
            $(document)
                .on('click',
                    '#ctl00_content_hidePast',
                    function (e) {
                        e.preventDefault();
                        var dt = new Date($.now() - 30 * 60000);
                        var time = dt.getTime();
                        var state = $("#<%= hdnPastBookingToggle.ClientID %>").val();
                        $("td.bgtime")
                            .each(function() {
                                var bookingTime = ($(this).text().split(':'));
                                var d = new Date();
                                d.setHours(parseInt(bookingTime[0]));
                                d.setMinutes(parseInt(bookingTime[1]));
                                var rowTime = d.getTime();

                                console.log("Now: " + time + " Time from row: " + rowTime);

                                if (rowTime < time) {
                                    var timeRow = $(this).parent();
                                    $(timeRow).toggle("slow");
                                };
                            });
                        if (state === "0") {
                            $("#<%= hdnPastBookingToggle.ClientID %>").val("1");
                        } else if (state === "1") {
                            $("#<%= hdnPastBookingToggle.ClientID %>").val("0");
                        };
                        return false;
                    });
        });

我做的最大的改变是按钮,那就是添加onclick="return false;" causesvalidation="false",因为上面的内容在没有按钮的情况下无效。