Firefox 3.5.2 Refresh (F5) заставляет выделенное значение формы копироваться в следующее поле - PullRequest
2 голосов
/ 10 сентября 2009

У меня странная проблема в Firefox 3.5.2 с обновлением F5.

Обычно, когда я фокусируюсь на поле ввода и нажимаю клавишу f5, содержимое этого поля ввода копируется в следующее поле формы после обновления F5.

Но, если вы проверите исходный код HTML, значения будут загружены правильно. У меня нет этой проблемы в IE8 или Safari 4.0.3.

Проблема не возникает, если я выполняю жесткое обновление или запускаю window.location.refresh (true).

После обновления F5: http://i805.photobucket.com/albums/yy339/abepark/after.jpg

Вот краткий обзор того, что происходит.

Ответы [ 6 ]

3 голосов
/ 11 сентября 2009

Полагаю, вам стоит обратить внимание на атрибут autocomplete , Вы должны установить его в поле ввода. Однако будьте осторожны, так как это вызовет два эффекта.

  1. Когда вы обновляете страницу, она не запоминает старые значения
  2. Раскрывающийся по умолчанию список уже используемых значений в этом поле ввода также будет отключен.

Если вы хотите сохранить второе поведение, вы должны снова включить атрибут autocomplete с JS.

2 голосов
/ 10 сентября 2009

Браузеры могут запоминать содержимое поля формы при обновлении. Это действительно может сбить ваш сценарий, если он полагается на начальное значение поля, совпадающее с тем, что в HTML. Вы можете попытаться предотвратить это, вызвав form.reset () при запуске.

Различные браузеры имеют разные стратегии для определения, когда форма или поле совпадают с предыдущей страницей. Если у вас есть конфликтующие имена или имена, которые меняются при перезагрузке, очень возможно, что вы их перепутаете. Нужно было бы увидеть какой-нибудь код, чтобы сработать наверняка.

0 голосов
/ 11 января 2012

У меня была похожая проблема, связанная с моим вопросом на Контроль ввода показывает неверное значение, даже если элемент inspect показывает правильное значение

Проблема возникла у меня в Firefox, но не в Chrome, для некоторых, но не для всех элементов управления в форме, и когда я нажал F5, но не Ctrl-F5.

"Фиктивная форма", кажется, разрешила это для меня.

0 голосов
/ 11 сентября 2009

Все идентификаторы элементов должны быть уникальными, если два элемента имеют одинаковые идентификаторы, то это может быть причиной того, что Firefox вставляет одинаковые значения в те элементы, в которые эти значения изначально не были введены.

0 голосов
/ 11 сентября 2009

@ Аноним: кто бы ты ни был, ты потрясающий!

@ bobince: спасибо за отзыв.

Я добавил фиктивный тег формы с атрибутом autocomplete = "off", и это решило проблему! Я почесал голову, потому что у меня не было этой проблемы в Safari 4.0.3 или Internet Explorer 8.

<form action="" autcomplete="off">
<!-- my code -->
</form>

Значения загружались корректно в серверной части (ASP.NET MVC 1.0 / Spark View), и исходный код HTML отражал это, но значения поля ввода не заполнялись правильно. Я использовал диспетчер соединений YUI и Javascript для поддержки редактирования на месте и выбора даты. Я попытался изменить вызов XHR на вызов GET вместо POST, и возникла та же проблема.

В любом случае, проблема заключалась в том, что Firefox не устанавливал правильные значения для полей ввода для обновлений F5.

Опять же, большое спасибо! Ребята, вы молодцы!

0 голосов
/ 10 сентября 2009

В бэкэнде я использую ASP.NET MVC 1.0 с движком Spark View. Когда я проверяю исходный код после обновления F5 в Firefox 3.5.2, страница отображается правильно; однако, если вы посмотрите на страницу визуально, в поле смежного поля формы появится значение из предыдущего поля.

Я включил достаточно кода, чтобы вы могли просто понять, что я пытаюсь сделать. Снова, рендеринг в порядке, и окончательный вид / HTML-код в порядке. Это то, что я вижу на экране, это неправильно. Я использую скрытые переменные; но проблема возникла и до его использования.

Обратите внимание, что в приведенном ниже коде у меня есть 2 различных поля идентификатора: "date_ {projectTask.ProjectTaskId}" и "finishDate_ {projectTask.ProjectTaskId}, которые получают рендеринг в нечто вроде" date_1 "и" finishDate_2 ".

<table>
    <for each="ProjectTask projectTask in projectTasksByProjectPhase">
        <input type="hidden" value="${projectTask.ProjectTaskId}" />
        <tr>
        <td class="date">
            <div class="box">
                <div class="datefield">
                    <input type="text" id="date_${projectTask.ProjectTaskId}" value="${startDate}" /><button type="button" id="show_${projectTask.ProjectTaskId}" title="Show Calendar"><img src="~/Content/yui/assets/calbtn.gif" width="18" height="18" alt="Calendar" ></button>
                </div>
            </div>
        </td>
        <td>
            <div class="box">
                <div class="datefield">
                    <input type="text" id="finishDate_${projectTask.ProjectTaskId}" value="${finishDate}" /><button type="button" id="finishShow_${projectTask.ProjectTaskId}" title="Show Calendar"><img src="~/Content/yui/assets/calbtn.gif" width="18" height="18" alt="Calendar" ></button>
                </div>
            </div>
        </td>
    </tr>
    </for>
    </table>

К вашему сведению: $ {} используются для вывода переменных в движке Spark View.

Я также использую соединение YUI 2.7 для выполнения вызовов Ajax с целью обновления базы данных для событий «изменение» и «нажатие клавиши ввода / ввода». Я могу убедиться, что вызовы AJAX сделаны правильно, а значения полей формы все еще действительны.

Проблема возникает, когда я просто делаю обновление F5; по какой-то причине «finishDate_1» заполняется значением из «date_1».

Эта проблема возникает, просто нажав «date_1» и нажав F5; поэтому смежное поле просто заполняется, даже если нет вызовов AJAX.

Вот код Javascript, который я вызываю к концу тела "

YAHOO.util.Event.onDOMReady(
    function() {
        var idList = YAHOO.util.Dom.getElementsBy(function (el) { return (el.type == 'hidden'); }, 'input');
        len = idList.length;

        var startDatePickers = new Array();
        var finishDatePickers = new Array();

        for (var i = 0; i < len; i++) {
            var id = idList[i].value
            startDatePickers[i] = new DatePicker("date_" + id, "show_" + id, "cal_" + id);
            startDatePickers[i].valueChanged.subscribe(updateDate, 'S');
            finishDatePickers[i] = new DatePicker("finishDate_" + id, "finishShow_" + id, "finishCal_" + id);
            finishDatePickers[i].valueChanged.subscribe(updateDate, 'F');
        }
    }
} 

Поле формы копируется перед обработкой любого кода Javascript, потому что я вызываю код Javascript ближе к концу тела после того, как весь HTML отображается. Итак, я предполагаю, что это проблема обновления в Firefox? Что вы, ребята, думаете?

Как вы можете видеть выше, я создал свой собственный объект выбора даты календаря, который позволяет либо вводить дату в тексте вручную, либо нажимать кнопку для просмотра календаря и выбора даты. После ввода или выбора даты будет сделан вызов AJAX, чтобы обновить базу данных в серверной части.

Спасибо всем за быстрый ответ.

...