флажок установлен в коде, но jquery не может его увидеть?

#jquery #asp.net-mvc-2

#jquery #asp.net-mvc-2

Вопрос:

Я работаю с asp.net mvc 2 и в моем действии я присвоил свойству значение true по умолчанию, чтобы оно было проверено при записи в коде, это флажок.

это генерирует следующий код

 <input id="BookTalent_BookATalent" class="bookTalent" type="checkbox" value="true" name="BookTalent.BookATalent" checked="checked">
  

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

теперь полученный мной код работает нормально, когда я не устанавливаю флажок booktalent по умолчанию для флажка booktalent, например, если я установлю флажок filmpermit, он скроет div, а если флажок booktalent установлен, он не скроет его. но почему это не работает, когда я устанавливаю значение по умолчанию true «checked» для флажка booktalent?

это мой jquery для проверки

 $('.filmPermit').click(function () {
            $('#filmPermit').toggle(this.checked);

            if (this.checked) {
                if ($('.bookTalent').is(':checked')) {
                    $('#lookingFor').toggle(true);
                } else {
                    $('#lookingFor').toggle(false);
                }

                if ($('.quote').is(':checked')) {
                    $('#lookingFor').toggle(true);
                } else {
                    $('#lookingFor').toggle(false);
                }
            } else {
                $('#lookingFor').toggle(true);
            }
        }).triggerHandler('click');
  

Редактировать:
это код, который я использую для разметки

 <%: Html.CheckBoxFor(model => model.BookTalent.BookATalent, new { @class = "bookTalent"}) %><label>Book A Talent</label>
        <%: Html.CheckBoxFor(model => model.BookTalent.Quote, new { @class = "quote"}) %><label>Get Quote</label>
        <%: Html.CheckBoxFor(model => model.BookTalent.FilmPermit, new { @class = "filmPermit" }) %><label>Film Permit</label>
  

Комментарии:

1. не могли бы вы также добавить используемую вами HTML-разметку?

2. Ну, у вас есть два фрагмента кода, контролирующие видимость «поиска» … кроме того, я бы использовал «.show()» и «.hide()» вместо «.toggle(true)» и «.toggle(false)».

3. хорошо, я попробую показать и скрыть, но код работает. две проверки вызваны тем, что есть и другие сценарии, но это не влияет на результат вопроса, почему он не реагирует на то, что флажок booktalent установлен в значение checked при генерации кода? если я решу не генерировать его с помощью checked, он будет работать так, как если бы

4. На самом деле, вы могли бы упростить мой код, заменив условные обозначения на $ (‘#lookingFor’).toggle($(‘.bookTalent’).is(‘:checked’));

5. спасибо за совет, JohnFx, я попробую, есть идеи по моему вопросу?

Ответ №1:

То, как структурирован этот код, состояние .bookTalent совершенно не имеет значения. Сразу после проверки .bookTalent у вас появляется следующее:

 if ($('.quote').is(':checked')) {
    $('#lookingFor').toggle(true);
} else {
    $('#lookingFor').toggle(false);
}
  

который переопределяет все, что было сделано в результате проверки на .bookTalent . Я не могу сказать вам, как это исправить, потому что вы ничего не сказали о том, что .quote предполагается делать.

Комментарии:

1. цитата — это флажок, и он не установлен. я почти уверен, что это не проблема, но попробуйте высказать свои мысли по этому поводу 😉

2. это проблема. Если quote установлен lookingFor флажок, он всегда будет отображаться.

Ответ №2:

Вот моя рабочая теория.

Вы устанавливаете флажок $(".bookTalent").is(':checked') вместо $("#BookTalent_BookATalent").is(':checked')

Выбор в классе может возвращать несколько элементов, и команда .is() вернет, отмечен ли КАКОЙ-либо из выбранных элементов.

Попробуйте использовать более точный формат и посмотрите, имеет ли это значение.

Кстати: у вас также есть такая же проблема с $('.quote').is(':checked')

Комментарии:

1. У меня возникла проблема только с флажком booktalent, даже если я использую идентификатор, он не работает так, как положено. меня беспокоит то, что если я сниму флажок и проверю его, то он заработает.

2. Как насчет $('.bookTalent').filter(':checked').doWhatever().end.filter('not(:checked)').doNotWhatever();