如何告诉onBlur点击时不要隐藏提交按钮?

时间:2010-02-04 02:39:47

标签: javascript jquery

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

<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() 
})

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


解决方案

今天的

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

  1. 延迟提交按钮的隐藏状态,直到提交事件被触发后,
  2. 让用户感觉他们的提交正在处理中
  3. $('textarea').blur(function(){ 
         $('#share').fadeOut() 
    })
    $('textarea').focus(function(){ 
         $('#share').fadeIn() 
    })
    

    这是间接的,而不是我真正想要的东西,但似乎很明显,直接操纵事件队列 - 比如写onBlur说“如果他们没有点击提交然后隐藏提交按钮” - 也许不是技术上可行。

2 个答案:

答案 0 :(得分:1)

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

尝试使其完全透明。

编辑:例如:

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

答案 1 :(得分:1)

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

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

注意:需要jQuery 1.4 +