У меня есть веб-страница, использующая jQuery с несколькими полями ввода. Поля ввода настроены на автоматический выбор существующего текста (свойство value) при срабатывании события click(). Он отлично работал, пока я не попытался предварительно заполнить одно из полей ввода из события document ready(). Если я это сделаю, то, несмотря на вызов метода focus() для нужного поля, это поле не получает фокуса (курсор не находится в поле ввода, а текст не выделяется автоматически). Если я нажму на поле, текст автоматически выделится, так что эта часть все еще работает, просто не устанавливая фокус.
Я включил код Javascript для всего события готовности документа на случай плохой синергии между элементами на странице. Обратите внимание, что вызов getSearchArguments() просто принимает аргументы URL и превращает их в ассоциативный массив. Вот HTML для поля адреса электронной почты, которое я пытаюсь автоматически сфокусировать/выбрать:
<!-- E-mail Address -->
<div NAME="divEmailAddress" ID="divEmailAddress">
<img NAME="imgEvernoteEmailAddress" ID="imgEvernoteEmailAddress" src="/images/evernote-mail-address.png" align="left" />
<input type="text" NAME="emailAddress" ID="emailAddress" wrap="soft" style="margin-left:5px;width:600px;" title="Enter your Evernote E-mail address here" value="Enter your E-mail address" ></input>
</div>
Может ли кто-нибудь сказать мне, как это исправить, чтобы метод focus() все еще работал после предварительного заполнения поля ввода?
ОБНОВЛЕНИЕ: оказалось, что добавлен новый явный вызов select() после того, как вызов focus() решил проблему. Если бы кто-нибудь мог сказать мне, почему это, я был бы признателен.
$(document).ready
(
function()
{
// Put jQuery related initialization code that must occur after the document is ready here.
// Have all the edit boxes except the Tags edit box auto-select the current text upon entry.
$("#editEvernoteTags").autoSuggest
(
data.items,
{
selectedItemProp: "name",
searchObjProps: "name",
startText: "Enter Evernote tags here...",
/* See autoSuggest.css
open: function(event, ui)
{
$(this).autoSuggest("widget").css
(
{
"width": 200
}
);
}
*/
} // data. items
); // $("input[type=text]").autoSuggest
$("#emailAddress").onblur = checkEmailAddress;
// $("#emailAddress").css('width', $("#editEvernoteTags").css('width') * 2);
// Synchronize the control widths to the autoSuggest "as-selections" class element.
var tagsWidth = $("ul.as-selections").width();
$("#emailAddress").width(tagsWidth);
$("#editComment").width(tagsWidth);
// If an E-mail address was provided as a URL argument, put it in the E-mail address field.
var urlEmailAddress = getSearchArguments().emailAddress;
// >>> COMMENTING OUT THIS IF/ELSE BLOCK ALLOWS THE FOCUS() METHOD TO WORK.
// value="Enter your E-mail address"
if (urlEmailAddress)
$("#emailAddress").val(urlEmailAddress);
else
$("#emailAddress").val("Enter your E-mail address");
// E-mail address
$('#emailAddress').click(function()
{
$(this).select();
});
// Comment
$('#editComment').click(function()
{
$(this).select();
});
// Set focus to the E-mail field.
$("#emailAddress").focus();
// >>>> This is needed to initially select the text the first time
// if the pre-fill code above is used.
$("#emailAddress").select();
} // function()
); // $(document).ready
$("#emailAddress").trigger('click');
вместо$("#emailAddress").focus();
? - person j08691   schedule 20.05.2012