簡體   English   中英

jEditable Submit onBlur失敗,出現ALT + TAB

[英]jEditable submit onBlur fails with ALT+TAB

我的jEditable可以很好地與textarea一起編輯對象內部的內容。 我正在使用jEditable的onblur選項直接將onBlur提交給函數(而不是url),並且所有工作都按預期進行,除非您使用alt + tab更改窗口。 當我使用alt + tab時,看起來內容是通過實際的http請求提交的,而忽略了我的回調函數。

我非常基本的示例實現如下所示:

$(".editable").editable(function(content,settings){
        content = content.replace(/\n/gi,"<br />");
        return content;
    },{
    data: function(value, settings) {
        return value.replace(/<br[\s\/]?>/gi, '\n');
    },
    type: "textarea",
    onblur: "submit"
});​

您可以在這里進行測試: http : //jsfiddle.net/xmajox/wePp5/

我已經嘗試了所有其他窗口操作:調整大小,移動等,甚至標簽之間移動瀏覽器上的偉大工程(提交數據並退出編輯模式)。

關於如何馴服的任何想法?

更新:經過更多測試並與其他人合作后,看來這取決於os(窗口管理器)。 它在統一的ubuntu 12.10上持續發生,但在mac或Windows上卻沒有發生(尚未測試其他linux機器)。

此外,它現在證明了我的回調方法並運行,當我使用ALT標簽,但形式被事后反正POST'd。 添加一個實時的preventDefault似乎沒有幫助。

找到了解決方法,但無法完全理解為什么在這種特定情況下會發生這種情況。

首先,我必須是世界上最(最不幸)的人,因為我已經在其他組合的十分之一上嘗試過此方法,但它沒有這個問題,只有我能實現的地方是:

 Ubuntu 12.10 (with Unity) and Chrome (v22 at the time of this post)

免責聲明:這並不意味着它不會在其他地方發生,我只是無法在我測試過的地方(或要求朋友進行測試)復制它。

問題:當焦點丟失時,jEditable-從1.7.1版本開始-在實際執行任何操作之前設置超時(默認為200ms),以防止根據源中的注釋重復操作。 如果您(使用上面的瀏覽器/操作系統組合)在觸發超時之前(也就是在提交數據和運行方法之前),在瀏覽器窗口外使用alt + tab,它將強制對數據執行POST請求,而完全忽略在preventDefaults或返回falses。 如果您按alt,則不會有此問題...按住它(超過200毫秒,即有足夠的時間觸發超時),然后按alt即可移開。

解決方案:我編輯了jEditable的源,以減少超時(甚至刪除它)。 所以我在280行附近說:

(...)
    input.blur(function(e) {
         // prevent double submit if submit was clicked 
         t = setTimeout(function() {
              form.submit();
         }, 200);
    });
(...)

我將其更改為:

(...)
    input.blur(function(e) {
        form.submit();
    });
(...)

注意:我刪除了此內容是因為在我的情況下(僅在模糊時提交textareas,並且沒有任何其他允許用戶提交數據的控件),我不會重現Mika Tuupola在評論中提到的雙重提交問題。 如果您有文本輸入字段(按Enter提交),並且提交onBlur處於活動狀態,則可能會遇到這種情況。 在這種情況下,我建議您只是減少超時時間,或者只是避免使用onBlur提交。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM