2012-12-26 65 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') 
    }); 

發生這種情況時,我試圖讓一個條目:

  • 點擊在該領域(focus事件),現場變得更大,並顯示輸入按鈕
  • 輸入文本
  • 點擊進入按鈕第一時間:現在模糊事件觸發至極讓現場再次小,但單擊事件不火
  • 如果我點擊一次按鈕的形式提交不

我認爲這意味着模糊和點擊事件互相干擾?

你可以找到問題here的小提琴。當您按下焦點領域的按鈕時,它會模糊區域但不會進入。當您按下字段模糊的按鈕時,該條目將被提交。

任何想法?

在此先感謝!

+1

你能建立一個的jsfiddle示範問題?用小提琴編輯的 – Snuffleupagus

+1

回答

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中。

2

你的問題是,click火上mouseup的按鈕,但是當你改變高度,以至於讓到你的鼠標不再是按鈕時mouseup發生。在textarea上使用mousedown代替click,然後使用trigger('blur')使兩個事件都發生。

注意:您仍然需要一個click事件,因此您可以使用return false來取消默認的表單提交功能。

fiddle

+0

您不需要'觸發'模糊 - 將返回false更改爲'preventDefault'並且模糊會觸發。 – Snuffleupagus

+0

我最初嘗試過,但textarea的'blur'事件不會觸發沒有'trigger()'的按鈕點擊。 (點擊按鈕後textarea在它周圍仍然有藍色的焦點突出顯示)。此外,您正在阻止對'click'的默認操作,而不是'mousedown',所以在這種情況下您需要這兩個事件。 – Scrimothy

+0

然而,你需要這兩個事件是正確的,這使得mousedown中的'return false'毫無意義。 – Snuffleupagus

1

這裏的問題是blur事件,其工作比click事件更快。這就是爲什麼它使字段更小而不是首先提交表單。

你只需要在第一線改變從clickmousedown

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

或者:

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