2012-04-06 9 views
6

私はこのコードをWindows 7のFirefox 11で実行しています(http://jsfiddle.net/QStkd/参照)。私は手動でselect()メソッドを呼び出すとChromeとIEでやるんですjqueryuiダイアログがfirefox 11の入力を `select()`できない

$('<div><input type="text" value="val" /></div>').dialog(); 

入力の値が選択されていないが、それはまた、動作しません。

これは既知の問題ですか?それを選択する方法はありますか? Timers workしかし、ロード後にjsfiddleでrunをクリックすると、それ以上動作しません。

答えて

3

Chrome(IE - OS Xではテストできません)でfocus()(jquery-uiはデフォルトで最初のtabbable要素となります)を呼び出して、ボックスのフォーカスを合わせ、ボックス内のテキストを選択します。 jquery.dialog.ui.jsから撮影

// set focus to the first tabbable element in the content area or the first button 
// if there are no tabbable elements, set focus on the dialog itself 
$(self.element.find(':tabbable').get().concat(
    uiDialog.find('.ui-dialog-buttonpane :tabbable').get().concat(
     uiDialog.get()))).eq(0).focus(); 

Firefoxは、他の一方で、フォーカスを呼び出すときにのみ、ボックス内にカーソルを置いているようです。したがって、あなたがやろうとしていることを達成するためには、ダイアログが作成された後で暗黙的にcall selectを呼び出す必要があります。

(実行をクリックするのではなく)タイマーを再読み込みすると、その例が毎回動作することがわかります。私は、jsFiddleは実際にはここ(おそらくハッシュチェンジイベント、または「実行」を押した後のペインの1つのフォーカスイベント)であると思う。深く掘り下げていない。

EDIT :(申し訳ありませんが、遅れています)「問題」の根本的な原因はFirefoxだと思われます。これが設計された動作かどうかはわかりませんが、私の見るところではFirefoxのように見えますのテキストは同じページの異なるコンテンツペイン内の2つの異なる入力要素で同時に選択できません。これはChrome(そして、IE9と思われます)には影響しないようです。

2つのiframeが並んでいるローカルの簡単な例を作成しました(左右に呼びましょう)。左にはテキストエリアがあり、右にjquery-uiダイアログがあります。これはあなたが投稿したバイブルと似ています。あなたがこれらをつなぎ合わせるとFirefoxで結果をチェックアウトした場合

<script type="text/javascript"> 
setTimeout(function() { 
    $('textarea').focus(); 
}, 1000); 
</script> 

は、あなたが入力が集中し、選択されていることに気づくでしょう:

<script type="text/javascript"> 
$('<div><input type="text" value="val" /></div>').dialog(); 
$('input').select(); 
</script> 

左には、次のコードを持っている:右、次のコードを持っています左のテキストエリアにフォーカスが置かれるまで私はこれに近いものがjsFiddleで起こっていると思う。

+0

+1よく書かれた回答のため、これは修正されていますか? – qwertymk

+0

私はこれ以上見る機会がありませんでした。私はそれがFirefoxのバグかもしれないと言います。あなたはそれについて何かを発見したか、解決策を見つけることに終わりましたか? – chrisn

+0

何も決定的なものはありません。私はこの1つのタオルを投げつけて、さまざまなブラウザが異なるux – qwertymk

2

openイベントの使用を試みてください。 このイベントは、ダイアログが開いたときにトリガーされます。

$('<div><input id="yourInput" type="text" value="val" /></div>').dialog({ 
    open:function(){ 
    $("#yourInput").focus().select(); 
    } 
     } 
) 

http://jsfiddle.net/sergeir82/A6Wah/8/

http://jsbin.com/etivej/4/

0

これは、あなたがDOCTYPEを設定しているかどうかを判断するDOM内のFFの問題です。それを修正するための素晴らしい方法はありません、フォーカスするタイマーは、 "ハックの周り"になる傾向があります。しかし、Doctypeがw3 xhtml標準に設定されている場合は、thisを使用してフォーカスを選択することもできます。入力のプロパティとしてonfocus="this.select();"を追加すると、フォーカスされたときにすぐに選択されます。

関連する問題