0

好的,我在这里迷路了。我在这里和其他地方阅读了很多关于如何检查给定元素的状态的帖子,特别是它是可见还是隐藏,并使状态的变化触发一个事件。但我无法使任何建议的解决方案发挥作用。

首先,由于每个人似乎都首先跳到这一点,因此需要这样做,因为我有一个 jQuery 脚本,它处理在可点击状态下显示 svg 图标。另一个已经具有在通过单击图标使表单可见时执行相关操作的功能,显然我想重用这些功能。

我试过的:

最初我尝试让两个脚本都作用于单击事件(这仍然是理想的解决方案)......

脚本 1:

 $(".booked").on("click", function() {
         $("#cancellation_Form_Wrapper").css("visibility","visible");
 }).svg({loadURL: '../_public/_icons/booked.svg'});


Script 2:

 $(".booked").on("click", function() {
 // do stuff
 });

这不起作用,所以我尝试研究跨两个脚本共享一个事件,但无法在这个主题上取得任何进展,所以我尝试触发另一个事件以让第二个脚本拾取....

脚本 1:

 $(".booked").on("click", function() {
         $("#cancellation_Form_Wrapper").css("visibility","visible");
         $("#cancellation_Form_Wrapper").trigger("change");
 }).svg({loadURL: '../_public/_icons/booked.svg'});

脚本 2

 $("#cancellation_Form_Wrapper").on("change", function(event){
    // do stuff
 });

这再次不起作用我不清楚为什么这没有达到预期的效果。

然后我尝试了 is(:visible) ....

脚本 1

 $(".booked").on("click", function() {
         $("#cancellation_Form_Wrapper").css("visibility","visible");
 }).svg({loadURL: '../_public/_icons/booked.svg'});

脚本 2

 $("#cancellation_Form_Wrapper").is(":visible", function(){
 // do stuff
 });

所以我有点失落。理想的情况是回到第一个概念。我不明白为什么两个脚本都不能处理 svg 上的点击事件。我认为这与事件处理程序有关,但我不确定如何修改脚本,以便它们都拾取相同的事件。

如果我无法使用可见性状态更改的事实来触发操作。

欢迎任何指导。

编辑好的,我刚刚解决了脚本 2 从脚本 1 中获取触发事件的问题。遗憾的是,这是我的一个基本错误……表单阻止了警报的显示。但是我仍然无法让 is(:visible) 工作。

4

1 回答 1

0

您的语法可能不正确:

$("#cancellation_Form_Wrapper").is(":visible", function(){
    // do stuff
});

应该:

if($("#cancellation_Form_Wrapper").is(":visible")){
    // do stuff
});

编辑:如果您希望在 div 可见后发生某些事情,您可能需要使用 show() 回调而不是切换可见性:

$('#cancellation_Form_Wrapper').show(timeInMilliseconds, function(){
    // do something
});

但是,这需要在同一个函数中进行,我认为这不会改善你的位置。

问题可能是您的第二个on()脚本与您的第一个脚本同时触发,这意味着包装器尚不可见。on()您可以尝试在短时间内包装第二个:

$(".booked").on("click", function() {
    setTimeout(function(){
        if($("#cancellation_Form_Wrapper").is(":visible")){
            // do stuff
        });
    }, 100);
});

这应该会引入足够的延迟,以确保在尝试执行第二条语句之前已经显示了包装器。

于 2012-10-25T10:32:37.433 回答