【问题标题】:Conditional Statement with CallBack Not Fireing不触发回调的条件语句
【发布时间】:2023-07-15 01:32:02
【问题描述】:

我有一个具有链接功能的基本条件语句。在 else 方法之后有一个不触发的 show() 回调。

我有什么问题?语法??

谢谢

var closeList = $('#west');

    $('#menuToggle').click(function(){
        var p = $('#west').css('display');
        if (p != "block") {
            $('#contentBox').width('70%', function() {
                $('#west').show(); // <--THIS DOESNT FIRE!!
            });
        } else {
            $('#west').hide();
            $('#contentBox').width('98%');
        }
    });

HTML

<!-- ------------------------- Main Content -------------------- -->
    <div id="wrapper" class="wrapperPosition">

        <div id="west">
        </div>

        <div id="contentBox">
            <div id="content" class="contentPosition"></div>
        </div>
    </div>

【问题讨论】:

  • @RubbleFord 我做了,但我不明白这有什么关系 - 其他一切都有效。谢谢

标签: javascript callback conditional-statements zepto


【解决方案1】:

按顺序调用它们而不是使用回调:

if (p != "block") {
    $('#contentBox').width('70%');
    $('#west').show();
}

问题是.width() 没有一个选项可以同时接受一个值和一个函数,只能接受一个:

.width( value )
.width( function(index, width) )

因此,将其与值配对意味着该函数将被忽略。


详细说明我的评论:

if ($('#west').is(':hidden')) {
    $('#contentBox').width('70%');
    setTimeout(function () {
        $('#west').show();
    }, 10);
}

【讨论】:

  • Thnx,但这会导致内容框移出舞台然后重新打开。无论我执行 show() 的顺序是什么,它都会首先触发导致 contentBox 退出舞台,然后转到我想要的位置。
  • @Andaero 如果您需要稍微延迟show,请使用setTimeout 并稍稍超时:setTimeout(function () { $('#west').show(); }, 10);。另外,条件测试到底是什么? #west 是否隐藏?如果是这样,请改用if ($('#west').is(':hidden'))。 (请参阅编辑以获取更新的代码)
  • 谢谢!! Totallt 忘记了 setTimeout 函数。