Изменение значения поля ввода с помощью Javascript побеждает после вызова метода focus

У меня есть веб-страница, использующая 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

person Robert Oschler    schedule 19.05.2012    source источник
comment
Не могли бы вы сделать $("#emailAddress").trigger('click');​​​​​​​​ вместо $("#emailAddress").focus();?   -  person j08691    schedule 20.05.2012
comment
@ j08691 - попробую.   -  person Robert Oschler    schedule 20.05.2012
comment
@caligula - я добавил фрагмент HTML для адреса электронной почты и DIV, которому он принадлежит.   -  person Robert Oschler    schedule 20.05.2012


Ответы (1)


Вы не установили обработчик фокуса. Вы установили обработчик кликов. Чтобы вызвать событие, используйте .click(), а не .focus().

$("#emailAddress").click();
person Madara's Ghost    schedule 19.05.2012