【问题标题】:How to tell onBlur not to hide the submit button when clicked?单击时如何告诉 onBlur 不要隐藏提交按钮?
【发布时间】:2010-02-04 02:39:47
【问题描述】:

我的模糊事件隐藏了提交按钮;但这样做似乎取消了提交事件。我只想在未单击提交本身时隐藏。如何确定焦点是否由于提交而丢失,或者只是因为在其他地方徘徊?

<form action="" method="post">
    <textarea id="message" name="message"></textarea>
    <input type="submit" id="share" value="Share">
</form>
...

$('textarea').blur(function(){ 
     $('#share').hide() 
})
$('textarea').focus(function(){ 
     $('#share').show() 
})

设置超时以允许在返回模糊之前触发提交事件对我来说似乎有点 hacky。我们不能做得更好吗?我可以告诉模糊不要阻止其他事件吗?或在 dom 中搜索待处理的提交事件?还是……?


解决方案

今天是基于勾选的答案,但更简单。使用 jquery 的“fadeOut”例程来

  1. 将提交按钮的隐藏状态延迟到提交事件触发之后,并且
  2. 让用户感觉他们的提交正在被处理

.

$('textarea').blur(function(){ 
     $('#share').fadeOut() 
})
$('textarea').focus(function(){ 
     $('#share').fadeIn() 
})

这是间接的,并不是我真正想要的,但似乎很清楚,直接操纵事件队列 - 例如写 onBlur 说“如果他们没有点击提交,则隐藏提交按钮” - 可能不是技术上可行。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    这是一种选择,虽然使用 jQuery .queue() 和 .clearQueue() 设置动画队列并在发生任何事情之前立即清除它有点笨拙:

       $(function() {
         $("#message").blur(function() {
           $("#share").delay(100).fadeOut();
         });
         $("#share").click(function() {
           $(this).clearQueue();
         });
       });
    

    注意:需要 jQuery 1.4+

    【讨论】:

    • 我比我的回答更喜欢这个。简单得多。
    • 这个和setTimeOut的解决方法基本一样; fadeOut 有效地延迟了 'display:none' 特性,直到提交事件触发之后。我不知道旧机器和疲惫机器,但在我的机器上,“延迟”和清除队列是不必要的:我只是将模糊例程更改为 | $("#share").fadeOut(); |。点击后提交就消失了,但我们已经看到它消失了,所以对于“正在发生的事情”并不会感到太不舒服。我找不到任何直接管理事件队列的方法,所以我现在就解决这个问题。谢谢。
    【解决方案2】:

    如果隐藏提交按钮,提交将取消。

    试着让它完全透明。

    编辑:例如:

    $('#share').css({ opacity: 0, position: 'absolute' });
    

    【讨论】:

    • 好主意;如果它占用的空间也被折叠起来会更好。
    • @John Mee:将height 和width 设置为0 ?
    • @Felix: 甚至只是高度:“...css('height','0') ...css('height','40px')。不幸的是这仍然隐藏了它虽然提交正在等待响应,但越来越近了:-)
    • @Slaks:好奇地玩“位置”与隐藏的行为相同;提交事件是否因为不在屏幕上而被阻止!?
    • @John:几乎可以肯定不是。你为什么不试试呢?
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多