jQuery在Do-While循环中无法按预期工作

时间:2019-06-14 14:25:39

标签: php jquery jquery-ui

我有一个列出酒店房间的网页,然后有选择地显示每个房间的空房日历。我的问题是日历并不总是显示。

用PHP do-while循环创建房间列表。每个条目都包含一些信息和一个查看可用性日历的链接。

<a href="javascript:;" data-roomid="<?php echo $room_id ?>" class="click">See Calendar</a>

然后,日历的显示由该jquery触发,以在hiddencal类的div中打开,并且具有与链接相同的data-roomid:

$(document).ready(function() {
    $("a.click").on('click', function() {
        var s = $(this);
        var roomid = $(this).attr("data-roomid");
        $(".hiddencal[data-roomid='" + roomid + "']").load("availcalendar.php?hid=<?php echo $hid;?>&room_id=" + roomid + "&month=<?php echo $ArrMonth;?>&year=<?php echo $ArrYear;?>")
        .slideToggle(1000, function() {
            s.html(s.text() == 'See Calendar' ? 'Hide Calendar' : 'See Calendar');
        });
    });
});

让我们说清单上有四个房间。如果我单击第一个房间上的链接,则显示日历,但是如果我单击第二个房间上的链接,则会显示slideToggle,但没有日历。

相反,如果我从第二个房间开始,然后转到第一个房间,则可以显示两个日历,但不能显示第三个或第四个日历。因此,实际上,我可以从下到上浏览日历,但从上到下无从浏览。

我尝试回显availcalendar.php文件中的变量,以查看是否删除了某些数据,但我无法跟踪问题。我想念的是我所缺少的东西吗?

EDIT2 GaetanoM是正确的,但这只是两个错误之一,所以我努力弄清楚发生了什么。我已经完成了这段代码,与GaetanoM的建议非常相似:

$(document).ready(function() {
$("a.click").on('click', function() {
    var s = $(this);
    var roomid = $(this).attr("data-roomid");
$(".hiddencal[data-roomid='" + roomid + "']").load("availcalendar.php?hid=<?php echo $hid?>&room_id=" + roomid + "&month=06&year=2019").slideToggle(1200, function() {
        s.html(s.text() == 'See Calendar' ? 'Hide Calendar' : 'See Calendar');
    });
});
});

availcalendar.php文件中存在另一个问题,一旦我将它们都纠正,一切都很好。感谢大家的建议。

1 个答案:

答案 0 :(得分:2)

您的问题在这一行:

$(".hiddencal[data-roomid='" + roomid + "']").load("availcalendar.php?hid=<?php echo $hid;?>&room_id=" + roomid + "&month=<?php echo $ArrMonth;?>&year=<?php echo $ArrYear;?>")
  

.load( url [, data ] [, complete ] ):从服务器加载数据并将返回的HTML放入匹配的元素中。

     

完成:当请求完成时执行的回调函数。

因此,要运行 slideToggle ,您需要使用 complete 回调:

$(".hiddencal[data-roomid='" + roomid + "']").load("YOUR URL", function() {
    s.slideToggle(1000, function() {
        s.html(s.text() == 'See Calendar' ? 'Hide Calendar' : 'See Calendar');
    });
});