Firefox (v 3.6 [и, возможно, другие версии] не сбрасывает значения переменных при обновлении страницы - PullRequest
2 голосов
/ 24 февраля 2010

Я работаю на странице администрирования, чтобы добавить статью на сайт. Два поля («Теги» и «Ресурсы») начинаются только с одного экземпляра, помеченного «Тег 1» и «Ресурс 1» соответственно.

Используя jQuery, я разрешаю пользователю добавлять дополнительные теги и / или ресурсы («Тег 2», «Тег 3» и т. Д.), И он работает ПОЧТИ так, как я этого хочу. Если страница была загружена свежей (без обновления), функция правильно подсчитывает добавление экземпляров 2, 3, 4 ...

НО ... если я обновляю страницу (в моем случае COMMAND-R), отображается один экземпляр (что я хочу, чтобы происходило), и отсчет начинается с того места, где он остановился, как только я начинаю добавление тегов, чтобы счетчик выполнялся примерно так: тег 1, тег 6, тег 7, тег 8 и т. д.

Это происходит только в Firefox (пока протестировано в Safari, IE6 и IE7).

Любые идеи, что вызывает такое поведение.

jQuery Сценарий ниже:

// Functions for adding additional tags and resources to articles
$(document).ready(function(){
    $(".tag:last").addClass("last-tag");
    $(".resource:last").addClass("last-resource");

    t = null;
    t = $("#tag-count").val();

    r = null;
    r = $("#resource-count").val();

    $(".add-tag").click(function () {
        t++;
        $(".last-tag")
            .removeClass("last-tag")
            .after("<li class=\"form-item last-tag\"><label for=\"tag-"+ t +"-input\">Tag "+ t +"</label><input type=\"text\" class=\"text-input\" name=\"tag[]\" id=\"tag-"+ t +"-input\" value=\"\" />");
        $("#tag-count").val(t);
        return false;
    });

    $(".add-resource").click(function () {
        r++;
        $(".last-resource")
            .removeClass("last-resource")
            .after("<li class=\"form-item last-resource\"><label for=\"resource-"+ r +"-input\">Resource "+ r +"</label><input type=\"text\" class=\"text-input\" name=\"resource[]\" id=\"resource-"+ r +"-input\" value=\"\" />");
        $("#resource-count").val(r);
        return false;
    }); 
});

Источник для "add.php":

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
    <title>Add an Article to Site</title>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

    <link rel="stylesheet" type="text/css" media="all" href="\\\\\SITE_ROOT\\\\\/css/admin/format.css" />
    <script src="\\\\\SITE_ROOT\\\\\/scripts/jquery.js" type="text/javascript"></script>
    <script src="\\\\\SITE_ROOT\\\\\/scripts/jquery.validate.js" type="text/javascript"></script>
    <script src="\\\\\SITE_ROOT\\\\\/scripts/admin/admin.functions.js" type="text/javascript"></script>
</head>
<body>

<h1>Site Administration</h1>

<ul class="nav">
    <li><?=anchor('admin/add/', 'Add New Article');?></li>
    <li><?=anchor('admin/delete/', 'Delete an Article');?></li>
</ul>

<?=form_open('admin/article_insert');?>

    <fieldset>
        <legend>Article Information</legend>
        <ul>
            <li class="form-item">
                <label for="title-input">Title</label>
                <input type="text" class="text-input" name="title" id="title-input" value="<?php echo set_value('title'); ?>" />
                <?php echo form_error('title'); ?>

            </li>
            <li class="form-item">
                <label for="subtitle-input">Subtitle</label>
                <input type="text" class="text-input" name="subtitle" id="subtitle-input" value="<?php echo set_value('subtitle'); ?>" />
                <?php echo form_error('subtitle'); ?>

            </li>
            <li class="form-item">
                <label for="author-input">Author</label>
                <input type="text" class="text-input" name="author" id="author-input" value="<?php echo set_value('author'); ?>" />
                <?php echo form_error('author'); ?>

            </li>
            <li class="form-item">
                <label for="category-input">Category</label>
                <input type="text" class="text-input" name="category" id="category-input" value="<?php echo set_value('category'); ?>" />
                <?php echo form_error('category'); ?>

            </li>

            <input type="hidden" id="tag-count" name="tag-count" value="1" />
            <li class="form-item tag">
                <label for="tag-1-input">Tag 1</label>
                <input type="text" class="text-input" name="tag[]" id="tag-1-input" value="" />
                <a href="#" class="add-tag">Add Another Tag</a>
                <?php echo form_error('tag[]'); ?>

            </li>
            <li class="form-item">
                <label for="content-input">Article Content</label>
                <textarea name="content" id="content-input" rows="10"><?php echo set_value('content'); ?></textarea>
                <?php echo form_error('content'); ?>

            </li>
            <li class="form-item">
                <label for="excerpt-input">Excerpt Content</label>
                <textarea name="excerpt" id="excerpt-input" rows="6"><?php echo set_value('excerpt'); ?></textarea>
                <?php echo form_error('excerpt'); ?>

            </li>

            <input type="hidden" id="resource-count" name="resource-count" value="1" />
            <li class="form-item resource">
                <label for="resource-1-input">Resource 1</label>
                <input type="text" class="text-input" name="resource[]" id="resource-1-input" value="" />
                <a href="#" class="add-resource">Add Another Resource</a>
                <?php echo form_error('resource[]'); ?>

            </li>
            <li class="form-item">
                <label for="url-input">URL</label>
                <span class="pre-input-span"><?=base_url()?></span><input type="text" class="text-input" name="url" id="url-input" value="<?php echo set_value('url'); ?>" />
                <?php echo form_error('url'); ?>

            </li>
            <li class="form-item">
                <label for="submit-input">Submit</label>
                <input type="submit" name="submit" id="submit-input" value="Submit Article" />
            </li>
        </ul>
    </fieldset>

</form>

<p><br />Page rendered in {elapsed_time} seconds</p>

</body>
</html>

Ответы [ 2 ]

3 голосов
/ 24 февраля 2010

Это потому, что вы храните счетчик тегов в скрытом поле. Firefox по умолчанию позволяет обновлять страницу без потери входных данных, поэтому количество тегов не обновляется.

Вы можете сделать одну из трех (или более) вещей, чтобы исправить это.

1) Я полагаю, что вы можете использовать defaultValue для получения начального значения, но я не смог найти список поддержки браузера ( Обновление: Только что протестировано в IE6, IE7, IE8 , FF2, FF3, FF3.6, Safari 4, Chrome 3, и это решение прекрасно работает. ):

var t = null;
t = $("#tag-count")[0].defaultValue;

или

var t = null, tag_count = $("#tag-count");
tag_count.val( tag_count[0].defaultValue ); // Update the old value with the correct one
t = tag_count.val();

2) Просто используйте обычную переменную для хранения счетчика тегов, и он будет сбрасываться при каждой загрузке

Измените t = null; на var t = 1; и просто используйте его, но удалите все вызовы на $("#tag-count"). Если вам нужна эта информация на сервере, добавьте:

$("form").submit(function(e){
   $("#tag-count").val(t);
});

3) Используйте поле как у вас, но сбросьте его при загрузке страницы:

$("#tag-count").val(1); // Assumes it always starts at 1
0 голосов
/ 24 февраля 2010

Спасибо за помощь всем.

Я решил обменять скрытый ввод на a, и он решил сам. Эта проблема была решена, когда у firefox не было входного значения для сохранения при обновлении.

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