Хорошие формы, вызывающие ясную форму вопроса - PullRequest
0 голосов
/ 04 августа 2011

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

$(':input','#templatesForm')
.not(':submit, :button, :hidden, :reset')
.val('');   

РЕДАКТИРОВАТЬ:

<select size="1" name="status" id="status">
<option value="">- Select -</option>
<?php
echo $statuses;
?>
</select>

Редактировать 2:

Я не знаю, что вызывает эту проблему, будь то красивые формы или плагин проверки формы jQuery или что, потому что при нажатии кнопки сброса я знаю, использовать этот код:

$("#reset").click(function() {
    validator.resetForm();
});

У меня есть несколько раскрывающихся списков, и после сброса формы они сбрасывают значения всех полей формы, даже раскрывающегося, однако текст раскрывающегося списка остается таким же, как и последнее изменение пользователя. Кто-нибудь знает и решение сделать обновление select, чтобы его первоначальный вариант был по умолчанию?

Редактировать 3:

Любые идеи от кого-либо, потому что я был озадачен этим несколько дней назад.

Редактировать 4:

Надеюсь, у меня появится кто-то, у кого есть хотя бы одна идея!

Редактировать 5:

Вот скрипта js, которая делает то, о чем я говорю. Он сбрасывает значение раскрывающегося списка до 0, но не меняет текстовую опцию обратно на значение по умолчанию - Выбрать -

http://jsfiddle.net/EwpXp/

Ответы [ 2 ]

1 голос
/ 06 августа 2011

Во-первых, я убрал Вашу скрипку со всех дополнительных скриптов (проверка и шаблон):

http://jsfiddle.net/Jacek_FH/EwpXp/5/

Далее я исправил функцию сброса для работы с красивыми формами. Выберите:

http://jsfiddle.net/Jacek_FH/EwpXp/7/

Как работает Niceforms?

Идея проста: поскольку обычные поля ввода (включая переключатели, флажки, текстовые области и т. Д.) Можно стилизовать только в небольшой степени, их необходимо скрыть, а их внешний вид заменить на аналогичный рабочий, новый, полностью настраиваемый строит. В теории это не кажется действительно сложным. Но от теории к практике есть большой путь.

Как обрабатывается выбор

<div class="NFSelect" style="width: 80px; left: 140px; top: 77px; z-index: 999;">
    <img class="NFSelectLeft" src="img/0.png">
    <div class="NFSelectRight">- Select -</div>
    <div class="NFSelectTarget" style="display: none;">
        <ul class="NFSelectOptions">
            <li><a href="javascript:;" class="NFOptionActive">- Select -</a></li>
            <li><a href="javascript:;">Active</a></li>
            <li><a href="javascript:;">Inactive</a></li>
        </ul>
    </div>
</div>
<select id="status" class="NFhidden" name="status" size="1">
    <option selected="selected" value="">- Select -</option>
    <option value="Active">Active</option>
    <option value="Inactive">Inactive</option>
</select>

Когда запускается сброс в форме, все вводы html сбрасываются, но Niceforms дублируют выбор с помощью divs. Поэтому я скопировал значение из опции в div Niceforms (после сброса). Мой код:

$('#reset').click(function(){
    // reset form
    $(':input','#templatesForm')
    .not(':submit, :button, :hidden, :reset')
    .val('');
    // update select
    $('select').each(function(){
        var option = $('option:selected', this).html();
        var niceselect = $(this).parents('dd').find('.NFSelectRight');
        niceselect.html(option);
        $(this).parents('dd')
            .find('.NFSelectTarget a')
            .removeClass('NFOptionActive')
            .filter(':first').addClass('NFOptionActive');
    });
});

редактировать

после рассмотрения есть и другой способ - вы можете перезагрузить Niceforms. Но у него есть цена - форма мигает

$('#reset').click(function(){
    // reset form
    $(':input','#templatesForm')
    .not(':submit, :button, :hidden, :reset')
    .val('');
    // reload niceforms
    NFDo('stop');
    NFDo('start');
});
1 голос
/ 05 августа 2011

Вы сбрасываете значения, но не изменяете выбор, поэтому, конечно, выбор не изменится сам по себе.Рассмотрим что-то вроде:

$notElements = $('input[type="submit"], input[type="hidden"]', '#templatesForm');
$resetable = $('#templatesForm input').not($notElements);
$('input[type="reset"]').click(function() { $resetable.val(""); return false; });
...