【问题标题】:Disable Hover Effect After File Upload with Jquery使用 Jquery 上传文件后禁用悬停效果
【发布时间】:2012-06-01 13:42:03
【问题描述】:

我正在使用 hack 使文件上传输入在浏览器中显示相同。诀窍是基本上将上传输入的不透明度设置为零,并在其上方放置一个常规输入,并使用自定义样式。用户上传文件后,我使用 jquery 来获取文件名的值并将其存储在其上方的输入中(假输入)。

我的 Jquery 是:

    var browse = $("#browse");

    $('.wpcf7-file').on('change', function(){
            $('#fakeUpload').val(this.value).css({'background':'#f1f1f1', 'text-indent':'72px'});
            browse.css('backgroundPosition' , '5px -60px');
    });

    $("input.wpcf7-file").hover(function(){
        browse.css('backgroundPosition' , '5px -28px');
    }, function(){
        browse.css('backgroundPosition' , '5px 4px');
    });

如您所见,这里做了两件事:从 .wpcf7 输入中获取一个值并将其存储为 #fakeUpload 的值。 div, browse 或多或少是一个指示上传状态的按钮。用户选择文件后,浏览按钮进入非活动状态。

问题是用户进入这种“非活动状态”后,其下方的悬停效果仍然保持活动状态。使用上传文件后(更改输入)我想禁用所有悬停效果。解决此问题的最佳方法是什么?

如果您需要查看我的 html/css,请告诉我,但我认为这是一个非常简单的 jquery 问题。

【问题讨论】:

  • 你是否使用disable属性实现非活动状态?
  • 不,非活动状态只是使用精灵的不同图像......

标签: jquery file-upload hover


【解决方案1】:

change 事件中,您可以向该字段添加一个类,如下所示:

     $('.wpcf7-file').on('change', function(){
        /// you code
        $(this).addClass('inactive');
     });

然后更改悬停选择器

    $("input.wpcf7-file:not('.inactive')").hover(function(){
        browse.css('backgroundPosition' , '5px -28px');
    }, function(){
        browse.css('backgroundPosition' , '5px 4px');
    });

Working sample

【讨论】:

  • 因为这是一个 hack,它不是真正的按钮或输入。 “按钮”或多或少是#browse 的背景图像。所以我认为启用/禁用不起作用
  • 加上这会一起禁用悬停效果
  • 是的,我明白你在这里的目的。目前您的代码仍然显示悬停效果。具有 wpcf7-file 类的输入也将被分配为非活动类。在这种情况下会起作用吗?
  • @JCHASE11 演示运行良好,$("input.wpcf7-file:not('.inactive')") 就足够了
【解决方案2】:

我认为这可能对你有用:

var browse = $("#browse");

$('.wpcf7-file').on('change', function(){
        $('#fakeUpload').val(this.value).css({'background':'#f1f1f1', 'text-indent':'72px'});
        browse.css('backgroundPosition' , '5px -60px');
        $("input.wpcf7-file").off("mouseenter ").off("mouseleave")
});

$("input.wpcf7-file").hover(function(){
    browse.css('backgroundPosition' , '5px -28px');
}, function(){
    browse.css('backgroundPosition' , '5px 4px');
});

【讨论】:

    【解决方案3】:

    尝试:

    $("input.wpcf7-file").unbind('mouseenter mouseleave')
    

    【讨论】:

    • 我不确定我将如何使用它....作为 on change 事件的回调?还是怎么做?
    • 就像 mawcsco 写的那样,你必须在你的代码之后的 change 事件中这样做,小心那个 "$("input.wpcf7-file").off("mouseenter ").off( "mouseleave")" 仅在 jQuery 1.7 上受支持,如果您有较旧的 jQuery 版本,请使用 unbind
    • 我有一个更新版本的jquery,为了时间,我会选择适合我的!感谢您的帮助
    猜你喜欢
    • 2013-08-17
    • 2015-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多