不透明度0后,Jquery显示无

时间:2012-11-12 16:59:01

标签: jquery

我有一个关于Jquery的问题,我试图抛出一个状态框,显示成功保存给最终用户。

我的问题是,在显示后我无法点击任何输入字段,因为div opacity设置为0而不是显示none,这是我的代码:

function messageBox(x){

n = x.indexOf('SUCCESS');

    if(n!==-1){
        $("#messageBoxSuccess").text(x.replace('SUCCESS', ''))
        $("#messageBoxSuccess").fadeTo(1000, 1);
        $("#messageBoxSuccess").delay(500);
        $("#messageBoxSuccess").fadeTo(1000, 0);

    }else{
        $("#messageBoxError").text(x.replace('ERROR', ''))
        $("#messageBoxError").fadeTo(1000, 1);
        $("#messageBoxError").delay(500);
        $("#messageBoxError").fadeTo(1000, 0);


    }
}

4 个答案:

答案 0 :(得分:3)

使用

$("#messageBoxSuccess").fadeIn(500, function() { });
$("#messageBoxSuccess").fadeOut(500, function() { });

代替。在淡入0后,它会淡化为0或1并隐藏(display:none)元素。

答案 1 :(得分:2)

jQuery的fadeTo有一个回调事件

.fadeTo( duration, opacity [, callback] )

所以你可以做到

$("#messageBoxError").fadeTo(1000, 0, function(){ $(this).hide() });

在fadeTo的末尾设置display:none。

答案 2 :(得分:0)

.fadeTo不会更改显示样式。如果您希望将显示更改为无,请使用.fadeOut().fadeIn()

答案 3 :(得分:0)

正如其他人所说,您可以使用.fadeIn().fadeOut()自动隐藏/显示内容。您也可以像这样清理代码:

function messageBox(x){
    var replaceText, msgBoxId;

    if (x.indexOf('SUCCESS') !== -1) {
        replaceText = "SUCCESS";
        msgBoxId = "#messageBoxSuccess";
    } else {
        replaceText = "ERROR";
        msgBoxId = "#messageBoxError";
    }

    $(msgBoxId).text(x.replace(replaceText, ''))
        .fadeIn(1000).delay(500).fadeOut(1000);
}

的变化:

  1. 删除对未声明的变量n的需要,这是一个隐含的全局
  2. 在条件
  3. 中设置“SUCCESS”或“ERROR”和msg box id
  4. 将所有其他常用代码移到条件之外而不是重复两次
  5. 使用jQuery链接,以便$("#messageBoxSuccess")或`$(“#messageBoxError”)仅评估一次。
  6. 切换到.fadeOut().fadeIn(),以便在动画之前/之后自动隐藏/显示内容。