Internet Explorer показывает эффект мерцания при обновлении HTML-формы после отправки - PullRequest
0 голосов
/ 14 февраля 2011

У меня есть следующий html / php / javascript код:

<?php
$textBox1 = $_POST["textBox1"];
?> 

<html>
<head>
</head>

<body>
<table border="0" cellpadding="2" cellspacing="2" align="center"  bgcolor="#996ad6">

<form method="post" action="<?php echo $PHP_SELF;?>" name="form1">
    <thead>
    <tr><th> Title </th></tr>
    </thead>
    <tbody>
        <tr>
            <td align="left">
                <textarea rows="8" cols="35" name="textBox1" textAlign="left" onKeyUp="changeVal()"><?php
                if (isset($_POST['textBox1'])) {
                    echo $textBox1;
                }
                ?></textarea><br />
            </td>

            <td align="left">
                <textarea rows="8" cols="35" name="textBox2" wrap="physical" align="left"><?php
                    if (isset($_POST['textBox1'])) {
                        echo "hello ".$textBox1;
                    }
                    ?></textarea><br />
            </td>
        </tr>
    </tbody>
    <script type="text/javascript" language="JavaScript">
    s1 = new String(form1.textBox1.value)
    var timer;

    function changeVal() {
        stoper();
        timer = setTimeout ( "document.form1.submit()", 800 ); 
    }

    function stoper() {
        clearTimeout(timer);
    }

    </script>
</form>
</table>

</body>
</html>

Это прекрасно работает в Chrome и Firefox, но вызывает раздражающий мерцающий эффект с Internet Explorer v8.0.

Есть ли способ избавиться от мерцания?

Ответы [ 2 ]

1 голос
/ 14 февраля 2011

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

Я вижу, как это может вызвать мерцание страницы. На самом деле, я удивлен, что у вас нет проблем хуже, чем это - я также ожидал бы, что он потеряет фокус и позицию поля формы при обновлении страницы, что может вызвать проблемы для пользователя (или, по крайней мере, спутанность сознания).

Гораздо лучшим решением для этого было бы реализовать его с помощью метода Ajax, который позволяет отправлять и получать данные через Javascript без необходимости обновления страницы. Возможно, вы захотите прочитать о httpRequest, который является объектом, который вы будете использовать в Javascript для этого. Тем не менее, нет необходимости заново изобретать колесо, так как есть ряд доступных библиотек JS, которые выполняют всю тяжелую работу за вас. Наиболее известным является JQuery, но есть множество других.

Кстати (не по теме, но стоит упомянуть):

  1. $PHP_SELF устарело. Вы должны использовать $_SERVER['PHP_SELF'] вместо.

  2. Спецификация HTML гласит, что раздел <head> не может быть пустым. По крайней мере, он должен содержать <title>.

1 голос
/ 14 февраля 2011

Когда вы отправляете через браузер, страница перезагружается. Chrome и Firefox достаточно быстрые при перерисовке, поэтому вы не замечаете перезагрузку, но IE, похоже, нет.

Чтобы избежать мерцания при перезагрузке, вам, вероятно, придется использовать javascript httpRequest для публикации значений формы и синхронизации двух textarea.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...