изменение значений скрытых полей с помощью jQuery только «запускает» первое изменение, но не следующие - PullRequest
1 голос
/ 21 февраля 2011

У меня странное явление с jQuery. У меня есть div с несколькими флажками и переключателями

<div id="advanced_search">
<div>
    <div class="searchoptions">
        <input type="checkbox" id="hidden_mr" name="hidden_mr" />
        <label for="hidden_mr">Model Release</label>
    </div>
    <div class="searchoptions">
        <input type="checkbox" id="hidden_pr" name="hidden_pr" />
        <label for="hidden_pr">Property Release</label>
    </div>
</div>
<div>
    <div class="searchoptions">
        <input type="radio" id="hidden_portrait" name="hidden_format" value="portrait" />
        <label for="hidden_portrait">Portrait</label>
    </div>
    <div class="searchoptions">
        <input type="radio" id="hidden_landscape" name="hidden_format" value="landscape" />
        <label for="hidden_landscape">Lanscape</label>
    </div>
    <div class="searchoptions">
        <input type="radio" id="hidden_square" name="hidden_format" value="square" />
        <label for="hidden_square">Square</label>
    </div>
    <div class="searchoptions">
        <input type="radio" id="hidden_pano" name="hidden_format" value="pano" />
        <label for="hidden_pano">Panoramic</label>
    </div>
</div>
</div>

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

<form method="get" name="searchbox" id="searchbox" action="">
<input type="hidden" id="mr" name="mr" value="" />
<input type="hidden" id="pr" name="pr" value="" />
<input type="hidden" id="format" value="" />
</form>

Я думал, что следующий код jQuery сделает это

$(document).ready(function() { 
    $('#hidden_mr').change(function() {
        if ($('#hidden_mr').attr('checked')) { $('#mr').val(1); }
        else { $('#mr').val(0); }
    });
    $('#hidden_pr').change(function() {
        if ($('#hidden_pr').attr('checked')) { $('#pr').val(1); }
        else { $('#pr').val(0); }
    });
    $('input:radio[name=hidden_format]').change(function() {
        $('#format').val($('input:radio[name=hidden_format]:checked').val());
    });
});

Когда я загружаю страницу и нажимаю «Release Model», она устанавливает #mr в 1, отмена выбора устанавливает его в 0. Но с другим флажком или радиокнопками ничего не происходит. Однако, если я снова загружаю страницу и нажимаю «Property Release», она устанавливает #pr в 1, но больше ничего не делает для других элементов. И то же самое для радиокнопок: я загружаю страницу и нажимаю на них, они работают, но все остальные перестают работать.

Я надеюсь, что я упускаю что-то очень простое (или, скорее: я боюсь, что это может быть так, и я слишком глуп, чтобы это увидеть ...) Кроме того, код может быть не самым умным, поэтому, если у кого-то есть предложения по улучшению, я буду рад их увидеть.

веселит, перекидывать

...