2012-12-26 7 views
8

私は、次のjQueryの機能を持っています。jQueryのぼかし()と(クリック)

1)

$(".content").delegate('.entryButton','click', function() { 
     var form = $(this).closest("form"); 
     var id = form.attr('id'); 
     var text = form.find("textarea").val(); 
     Sijax.request('add_entry', [id, text]); 

     //Prevent the form from being submitted (default HTML) 
     return false; 
    }); 

2フォームを送信)フォームを拡大し、エントリーボタンを

$("textarea").focus(function() { 
     $(this).css('height', '80px'); 
     var button = $(this).parent().next().children(); 
     button.css('visibility', 'visible'); 
     button.css('height', '20px') 
    }); 
を表示

3)テキストエリアを小さくしてボタンを非表示にします

$("textarea").blur(function() { 
     $(this).css('height', '30px'); 
     var button = $(this).parent().next().children(); 
     button.css('height', '0px') 
    }); 

私はエントリを作成しようとすると、この問題が発生:フィールドに

  • クリック(フォーカスイベント)、フィールドが大きく成長し、エントリーボタン
  • は、最初のエントリボタン上のテキスト
  • をクリックしてください示し時間:は今、火災がWICH blurイベントは、再びフィールド小さくなりますが、私はボタンをクリックすると、クリックイベントは再びフォーム送信ん
  • を発射しない

これは、ぼかしとクリックイベントが互いに干渉していると思いますか?

問題のフィドルはhereです。フィールドがフォーカスされた状態でボタンを押すと、フィールドはぼかされますが、フィールドは入力されません。フィールドがぼかされた状態でボタンを押すと、エントリは送信されます。

アイデア?

ありがとうございます!

+1

を使用して自分自身が快適見つけ、あなたはjsfiddle実証を設定することができ問題? – Snuffleupagus

+1

はfiddleで編集されました! – arnoutaertgeerts

答えて

2
$('.entryButton').on('click', function (e) { 
    return false; // to prevent default form post 
}); 
$("form").delegate('.entryButton','mousedown', function() { 
    $('textarea').trigger('blur'); 
    var form = $(this).closest("form"); 
    var id = form.attr('id'); 
    var text = form.find("textarea").val(); 
    $("#test").append(text);     

    //Prevent the form from being submitted (default HTML) 
    return false; 
}); 

、前と同様にフォーカスとぼかし機能を維持します。

thanks. 
+0

私の問題を参照してくださいhttp://stackoverflow.com/questions/42896084/jquery-ajax-on-focusout-on-submit-requires-2-clicks – DragonFire

0

高さを変更してリフローを強制すると、クリックイベントがキャンセルされるようです。最も簡単な解決策は、mousedownをクリックするか(ぼかしをかける前に実行する)、CSSの変更をsetTimeoutにラップするのではなく、mousedownです。

2

mouseupのボタンでclickが発生しますが、高さを変更すると、mouseupが発生したときにマウスがボタンに表示されなくなります。両方のイベントが発生するようにmousedownclickの代わりに使用し、次にtrigger('blur')textareaに使用します。

注:まだclickイベントが必要です。return falseは、デフォルトのフォーム送信機能を取り消すことができます。

fiddle

+0

ぼかしを 'トリガ 'する必要はありません。偽を' preventDefault'に変更すると、ぼかしが発生します。 – Snuffleupagus

+0

私はこれを最初に試みましたが、テキストエリアの 'blur'イベントは' trigger() 'がなければボタンクリックで起動しません。 (テキストエリアには、ボタンをクリックした後、まだ青いフォーカスが強調表示されています)。また、 'mousedown'ではなく' click'のデフォルトアクションを防止しています。この場合、両方のイベントが必要です。 – Scrimothy

+0

しかし、両方のイベントを必要とするのは正しいですが、それはmousedownの 'return false'を無意味にしてしまいます。 – Snuffleupagus

1

ここで問題は速くclickイベントよりも動作しますblurイベントです。そのため、最初にフォームを送信するのではなく、フィールドを小さくする理由です。

$(".content").delegate('.entryButton','mousedown', function() { 
// your code 
}); 

または::あなたが唯一のclickからmousedownに最初の行を変更する必要が

$(".content").bind('mousedown', function() { 
// your code 
}); 
関連する問題