2010-12-03 38 views
4

當用戶提交或關閉一個無效的輸入時,我有一個文本字段包裹在錯誤div中。如果用戶糾正了他的錯誤,我想刪除包裝,但是,方法會導致該字段失去焦點。jQuery:Textfield失去了重點解開()

$(special_input).live('keyup', function() { 
    if (input_okay && input_had_errors) { 
     $(this).unwrap(); 
    } 
}); 

沒什麼大不了的,我可以重置焦點,它工作正常...

$(this).unwrap().focus(); 

...到處但在IE!我試過在上面的函數中插入一個setTimeOut()函數來解決IE缺乏對focus()事件冒泡的支持,而且這種方法很有效。

唯一的問題是它將光標設置爲所鍵入的內容而不是結尾。 (什麼?!)

無論如何重置焦點似乎有點醜陋。有沒有辦法讓unwrap()擺脫它首先?

謝謝。

均田的解決方案:

的理由安德和難以捉摸指出,我決定修復錯位光標的問題,這可以通過在聚焦後重新設置文本框的值來實現它再次。代碼現在看起來像這樣。

$(this).unwrap(); 
setTimeout(function() { $(this).focus().val($(this).val()); }, 5); 

回答

3

我不認爲你可以.unwrap()沒有鬆動的焦點,因爲它會從DOM父節點,並追加如果母公司是事後的孩子。如果瀏覽器在分離它們時沒有移除焦點,則可以鍵入未附加的輸入字段。

+0

Gar。感謝您的高舉。沒有意識到它是如何工作的,但我猜想它還能怎樣?我想作爲替代方案,我會嘗試將該光標移到IE中文本框的末尾... – hellodally 2010-12-03 23:06:55

0

我同意難以捉摸的是,你可能不會丟失焦點,因爲引用的原因。你可能會考慮你將文本字段放在首位的原因。是否有可能通過簡單地將一個類應用到該字段中,或者將一個div放在該字段之前或之後來實現相同的效果?這可以讓你完全避開這個問題。

+0

感謝恩德。我正在使用rails form_helpers,並希望用我的jQuery代碼複製默認外觀,因爲我認爲它會比使用error_message默認值更容易實現...也許我錯了:) – hellodally 2010-12-04 02:30:00