Ответ 1
что об этом:
$("input").focus(function(){
this.selectionStart = this.selectionEnd = -1;
});
Я понимаю, что с помощью javascript вы можете выбрать содержимое текстового поля со следующим кодом (в jQuery):
$("#txt1").select();
Есть ли способ сделать обратное? Отменить выбор содержимого текстового поля? У меня есть фокусное событие серии текстовых полей, установленных для выбора содержимого внутри них. Есть моменты, когда я хочу сфокусировать конкретное текстовое поле БЕЗ выбора. То, что я планирую сделать, - это вызвать событие фокуса для этого конкретного текстового поля, но затем следовать ему с призывом отменить его выбор.
$("input[type=text]").focus(function() {
$(this).select();
});
//code....
$("#txt1").focus();
//some code here to deselect the contents of this textbox
Любые идеи?
Спасибо!
что об этом:
$("input").focus(function(){
this.selectionStart = this.selectionEnd = -1;
});
Если вы просто назначаете значение текстового поля самому себе, он должен отменить выбор текста.
Вам нужно установить атрибут selectionStart
и selectionEnd
. Но по какой-то причине установка этих событий фокуса не работает (я не знаю, почему). Чтобы заставить его работать, установите атрибуты через небольшой интервал.
$(document).ready(function(){
$('#txt1').focus(function(){
setTimeout(function(){
// set selection start, end to 0
$('#txt1').attr('selectionStart',0);
$('#txt1').attr('selectionEnd',0);
},50); // call the function after 50ms
});
});
Чтобы "сфокусировать конкретное текстовое поле без его выбора": Я бы использовал часть исправленный jquery-плагин jquery-fieldselection
используя это, вы можете вызвать
$('#my_text_input').setSelection({"start":0, "end":0}); // leaves the cursor at the left
или используйте эту уменьшенную версию, которая помещает курсор в конец текста (по умолчанию)
(function() {
var fieldSelection = {
setSelection: function() {
var e = (this.jquery) ? this[0] : this, len = this.val().length || ;
var args = arguments[0] || {"start":len, "end":len};
/* mozilla / dom 3.0 */
if ('selectionStart' in e) {
if (args.start != undefined) {
e.selectionStart = args.start;
}
if (args.end != undefined) {
e.selectionEnd = args.end;
}
e.focus();
}
/* exploder */
else if (document.selection) {
e.focus();
var range = document.selection.createRange();
if (args.start != undefined) {
range.moveStart('character', args.start);
range.collapse();
}
if (args.end != undefined) {
range.moveEnd('character', args.end);
}
range.select();
}
return this;
}
};
jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; });
})();
используется следующим образом:
$('#my_text_input').setSelection(); // leaves the cursor at the right
Вместо того, чтобы выбирать и затем отменять выбор, почему бы не просто временно сохранить логическое значение в элементе dom?
$("input[type=text]").focus(function() {
if($(this).skipFocus) return;
$(this).select();
});
//code....
$("#txt1").skipFocus = true;
$("#txt1").focus();
Я хотел бы предложить простое решение
$("input[type=text]").focus(function() {
$(this).select();
});
$("input[type=text]").blur(function() {
$('input[type="hidden"][value=""]').select();
});
//code....
$("#txt1").focus();
Вот простое решение без jquery
<input type="text" onblur="this.selectionStart = this.selectionEnd = -1;">
Если вы хотите отменить выбор текстового поля с помощью jQuery, выполните следующие действия:
$(your_input_selector).attr('disabled', 'disabled');
$(your_input_selector).removeAttr('disabled');