#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();