記載されている回答は、私によると部分的です。AngularとJQueryでこれを行う方法の2つの例を以下にリンクしました。
このソリューションには次の機能があります。
- JQuery、Safari、Chrome、IE、Firefoxなどをサポートするすべてのブラウザーで動作します。
- Phonegap / Cordovaに対応:AndroidとIO。
- 入力がフォーカスを取得してから次のぼかしまでフォーカスを1回だけ選択してからフォーカスする
- 複数の入力を使用でき、グリッチアウトしません。
- Angularディレクティブは再利用に優れており、select-all-on-clickディレクティブを追加するだけです
- jQueryは簡単に変更できます
JQuery:
http ://plnkr.co/edit/VZ0o2FJQHTmOMfSPRqpH?p= preview
$("input").blur(function() {
if ($(this).attr("data-selected-all")) {
//Remove atribute to allow select all again on focus
$(this).removeAttr("data-selected-all");
}
});
$("input").click(function() {
if (!$(this).attr("data-selected-all")) {
try {
$(this).selectionStart = 0;
$(this).selectionEnd = $(this).value.length + 1;
//add atribute allowing normal selecting post focus
$(this).attr("data-selected-all", true);
} catch (err) {
$(this).select();
//add atribute allowing normal selecting post focus
$(this).attr("data-selected-all", true);
}
}
});
Angular:
http : //plnkr.co/edit/llcyAf?p=preview
var app = angular.module('app', []);
//add select-all-on-click to any input to use directive
app.directive('selectAllOnClick', [function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var hasSelectedAll = false;
element.on('click', function($event) {
if (!hasSelectedAll) {
try {
//IOs, Safari, thows exception on Chrome etc
this.selectionStart = 0;
this.selectionEnd = this.value.length + 1;
hasSelectedAll = true;
} catch (err) {
//Non IOs option if not supported, e.g. Chrome
this.select();
hasSelectedAll = true;
}
}
});
//On blur reset hasSelectedAll to allow full select
element.on('blur', function($event) {
hasSelectedAll = false;
});
}
};
}]);
<label>
、ラベルではなくを使用することですvalue
。JSとCSSを使用して同じように見せることができますが、それほどセマンティックではありません。dorward.me.uk/tmp/label-work/example.htmlには、jQueryを使用した例があります。