#javascript #jquery #html #angularjs
#javascript #jquery #HTML #angularjs
Вопрос:
У меня есть select
выпадающий список, заполненный директивой angularjs ng-repeat
. Я бы хотел, чтобы a div
отображался только при выборе определенного параметра.
Вот код:
<select type="text"
class="form-control"
ng-model="vm.request.requestType"
name="requestType" id="requestType"
placeholder=""
required>
<option selected></option>
<option value="test">test</option>
<option ng-repeat="requestType in vm.requestTypes">{{requestType}}</option>
</select>
<script>
$(function() {
$("#requestType").change(function () {
if ($("#test").is(":selected")) {
$("#continueCheckbox").show();
} else {
$("#continueCheckbox").hide();
}
}).trigger('change');
});
</script>
<div id="continueCheckbox">
<input type="checkbox"
name="continueCheckbox"
value="continueCheckbox">
Check this box to continue, and to confirm that you have read the
Documentation
</div>
Опция «тест» предназначена только для проверки того, работает ли функция. В настоящее время флажок отображается независимо от того, что выбрано, и никогда не исчезает.
Комментарии:
1. Является ли проект angular вашим? Если это так, не используйте jQuery. Смотрите Ответы (и комментарии) ниже для различных вариантов достижения того, чего вы хотите с помощью Angular:
ng-if
,ng-hide
,ng-show
,ng-class
и / илиng-style
— это все возможные способы сделать то, что вы хотите с помощью Angular.2. Вы выяснили, как получить данные в ваше приложение angular из вашей базы данных?
Ответ №1:
Я настоятельно рекомендую не смешивать AngularJS и jQuery. Оба являются фреймворками для манипулирования DOM и плохо работают вместе. Вот один из способов, которым вы могли бы выполнить то, что вам нужно, с помощью AngularJS:
<div id="continueCheckbox" ng-if="vm.request.requestType === 'test'">
<input type="checkbox"
name="continueCheckbox"
value="continueCheckbox">
Check this box to continue, and to confirm that you have read the Documentation
</div>
Комментарии:
1. Очень похоже на это: … не смешивать AngularJS и jQuery… — в проекте Angular вам никогда не понадобится использовать jQuery. Если у вас возникнет соблазн использовать его, вы что-то упускаете в «угловом способе». Кроме того, могу ли я рекомендовать потенциально предлагать версии
ng-hide
иng-show
для выполнения этой работы?ng-if
имеет важные различия / варианты использования, которые отличаются от hide / show . И, как будто этих параметров было недостаточно, можно было бы даже использоватьng-style
, илиng-class
….2. @cale_b Хороший вызов,
ng-hide
был бы лучшим эквивалентом jQuery.hide()
.3. @Lex Это работает! Один вопрос, хотя, похоже, это меняется только тогда, когда отображается флажок, есть ли способ сделать так, чтобы текст появлялся и исчезал вместе с ним? Редактировать: неважно, я понял. Попробовал использовать другой параметр, и ctrl F5 обновился, и, похоже, он работает правильно
Ответ №2:
Вы пробовали использовать ng-class
директиву?
<div id="continueCheckbox" ng-class="selected: vim.request.requestType === 'test'"></div>
Затем обработайте стиль в файле .css
.selected {
display: none;
}
Ответ №3:
Если вы хотите использовать jQuery, вы могли бы просто проверить значение выбора. У вас это уже настроено.
var selectType=$(this).val();
if (selectType=="test") // instead of if ($("#test").is(":selected"))
Вы также можете использовать ванильный JS с .value для сравнения.