【问题标题】:Clicking a button in web app reveals inputs behind button, then unintentionally focuses on input单击 Web 应用程序中的按钮会显示按钮后面的输入,然后无意中将注意力集中在输入上
【发布时间】:2013-12-02 04:55:18
【问题描述】:

我有一个按钮(div.button),后面有一个表单(隐藏)。单击按钮时,按钮隐藏,然后显示表单(按此顺序)例如:

$('.button').on('touchend',function(){

    $('.button').hide();
    $(form).show();

});

这没问题,但问题是,如果我在显示输入的同一位置点击手机上的按钮,则该输入将已被选中并准备好输入。这是不需要的。这就像按钮被按住......或推动层。我的桌面上没有此功能。

按钮位于 div 中(绝对定位)并位于表单上方(也是绝对定位),按钮具有更高的 z-index。

任何想法如何解决这个问题?移动浏览器“touchend”是否会在屏幕的那部分进行某种按住?

这是一个问题的 jsfiddle: http://jsfiddle.net/m6BRP/2/

我还尝试将表单显示函数放在返回函数中,以便显示函数仅在隐藏函数完成后加载 - 但这没有效果。

【问题讨论】:

    标签: android jquery html google-chrome


    【解决方案1】:

    我认为 stopPropagation() 是你需要的:

    $('#face').on('touchend',function(event){
        event.stopPropagation();
        $('#face').hide()
        $('#under').show();
    });
    

    http://jsfiddle.net/m6BRP/8/

    我在手机上试了一下,以防万一,它对我有用。

    【讨论】:

    • 我很有希望,但是当我点击手机上的文字时,我选择了输入。顺便说一句,你用的是什么手机?
    【解决方案2】:

    看起来很冗长,但试试这个:

    $(function () {
        var form = $('css-selector');
        form.hide();
        $('.button').on('touchend', function () {
            $(this).hide(function () {
               form.show();
            });
        });
    });
    

    通过将整个内容包装在 $() 中,您知道 dom 在附加事件之前加载,因此所有事件都可以工作。通过隐藏表单,您可以确定按钮下方不会“流血”,尽管我不确定是什么原因造成的。最后,但是在带有超时的隐藏回调中显示表单,您可以确定它仅在触摸事件结束并且按钮消失时才显示。

    如果可行,请尝试消除复杂性...

    /** 编辑:删除了多余的超时 **/

    【讨论】:

    • 所以因为在表单显示功能之前有1000ms的延迟。但是您的解决方案向我展示的是 hide() 函数不是立即隐藏,而是默认设置动画。我猜这与它有关。非常感谢
    • 你知道如何在没有 1000ms 的计时器的情况下达到相同的结果吗?我不希望页面加载之间有 1 秒的延迟,只是为了避免选择输入。
    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 2019-11-20
    • 2015-01-21
    • 1970-01-01
    • 2012-01-20
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多