次のように、テーブルセル内にそれぞれ一連のテキスト入力があります。
<td class="tdTextInput">
<input type="text" value="0" name="txt1_9_4_2" id="txt1_9_4_2" class="input-supermini">
</td>
ユーザーがセルまたは入力をクリックするたびに、入力内のすべてのコンテンツを自動的に選択する必要があります (スプレッドシート エディターのようなものです)。
これまでのところ、信頼できる古い Firefox でのみ成功するスクリプトを次に示します。
//focus the textbox on td click
$('.tdTextInput').mousedown(function ()
{
$(this).find('input').first().focus();
});
//select all text on focus
$('.tdTextInput input').focus(function ()
{
//the data-selected attribute is used to prevent the
// autoselection to happen more than once per cell so that
// two consecutive clicks will allow the user to pinpoint the
// cursor to a specific position
var isSelected = $(this).attr('data-selected') == 'true';
if (!isSelected) {
$('input[data-selected]').removeAttr('data-selected');
$(this).attr('data-selected', 'true');
$(this).select();
}
});
//prevent non-numeric values from being added
$('.tdTextInput input').keydown(function (e)
{
CommonTools.IsNumeric(e);
});
CommonTools.IsNumeric
以下を参照してください:-(キーダウン機能は問題ではないため、おそらく関係ありません。完全を期すために質問に追加するだけです)
isNumeric = function (e)
{
if(!(e.which>=48 && e.which<=57)) //numeric values only
e.preventDefault();
}
これが FF と IE でのみ機能し、Chrome では機能しないのはなぜですか?
更新: ここでフィドルを作成しました: http://jsfiddle.net/dDc73/、ただし、フィドルの FF または IE でも機能しません。
詳細情報:セルをクリックすると、マウスのクリックを離すまですべてのテキストが選択されます。