2010-12-03 12 views
4

ユーザーが無効な入力を送信またはフォーカスしたときにエラーdivに折り返されたテキストフィールドがあります。ユーザーが間違いを訂正した場合、ラッパーを削除したいのですが、unwrap()メソッドを使用すると、フィールドのフォーカスが失われます。jQuery:unwrap()のテキストフィールドが失われる

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

大した、どこにでもなく、IEで...私はフォーカスをリセットすることができ、それが正常に動作します...

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

!私はsetTimeOut()の機能を上記の関数内に挿入して、focus()イベントのバブリングに対するIEの不足を回避しようとしました。

カーソルは、末尾ではなくタイプされているものの先頭に設定されます。 (何??)

フォーカスをリセットすることはとにかく醜いようです。 unwrap()を最初から設定しないようにする方法はありますか?

ありがとうございました。

ちょっと-ソリューション:エンダーととらえどころのない指摘の理由から

、私はちょうど上で焦点を当てた後、テキストフィールドの値をリセットすることによって行うことができ、見当違いのカーソルの問題を解決することを決めましたもう一度。コードは今このようになります。

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

答えて

3

私は考えていないということができます.unwrap()それはDOMから親ノードを削除し、親はその後だった子供たちを付加しているので、フォーカスを失うことなく。ブラウザがフォーカスを外していない場合は、非接続の入力フィールドをタイプすることができます。

+0

Gar。ヘッドアップをありがとう。それがどのように動作するのか気づかなかったが、他にどのようにできるのだろうか?私は代わりに、私はIEのテキストフィールドの最後にそのカーソルを取得しようとします... – hellodally

0

.unwrap()はフォーカスを失うことなく、引用した理由により難しいと私は理解します。最初にテキストフィールドを折り返している理由を考えるかもしれません。フィールドにクラスを適用するだけで、フィールドの前後にdivを置くだけで同じ効果を得ることは可能でしょうか?これにより、問題を回避することができます。

+0

ありがとうender。私はレールform_helpersを使用していて、私はそれがerror_messageのデフォルトを使って見分けるよりも簡単だろうと思ったので、私のjQueryコードでデフォルトの外観を複製したいと思っていました。 – hellodally

関連する問題