Мне нужно включить следующую кнопку, когда значения вставляются в текстовую область, а текстовая область не пуста. Это мой код:
<div class = "preview_field content-post-1stpage-next">
<label class = "col-md-5 mt-5" for = "content">tags</label><br>
<p class = "text-muted"><small class = "text-muted"><textarea disabled = "yes" id = "preview_tags placeholder = "tags...!"></textarea></small></p>
</div>
<div class = "post-1stpage-next text-center">
<button name = "wizard_goto_step" type = "submit" value = "{{ wizard.steps.prev }}">{% trans "prev step" %}</button>
<input type = "submit" value = "{% trans 'next' %}" disabled = "disabled"/>
</div>
и это код jquery, который я использовал, он даже не входит в его оператор if:
$(document).ready(function() {
$('#preview_field > label > small > textarea').on('keyup', function() {
let empty = false;
$('#preview_tags > textarea').each(function() {
empty = $(this).val().length == 0;
});
if (empty)
$('.post-1stpage-next input').attr('disabled', 'disabled');
else
$('.post-1stpage-next input').attr('disabled', false);
});
});
Проблема в том, что ваш селектор, который связывает обработчик событий, неверен. #preview_field
должно быть .preview_field
, так как это класс, а не идентификатор. Кроме того, small > textarea
является ребенком p
, а не label
.
Как только это будет исправлено, вы можете упростить логику, предоставив логический результат проверки длины значения поля на prop('disabled'
). Обратите внимание, что использование trim()
препятствует тому, чтобы пробелы были допустимым значением.
С учетом всего сказанного, попробуйте следующее:
$(document).ready(function() {
$('.preview_field > p > small > textarea').on('keyup', function() {
$('.post-1stpage-next input').prop('disabled', this.value.trim().length === 0);
});
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "preview_field content-post-1stpage-next">
<label class = "col-md-5 mt-5" for = "content">tags</label><br>
<p class = "text-muted">
<small class = "text-muted">
<textarea id = "preview_tags" placeholder = "tags...!"></textarea>
</small>
</p>
</div>
<div class = "post-1stpage-next text-center">
<button name = "wizard_goto_step" type = "submit" value = "{{ wizard.steps.prev }}">prev step</button>
<input type = "submit" value = "next" disabled = "disabled" />
</div>
Нашел ответ, я могу отключить или включить кнопку в зависимости от размера массива:
//enter code here`enable or disable next button based on the array length
if (array && array.length > 0) {
$('.post-1stpage-next input').removeAttr('disabled');
}else{
$('.post-1stpage-next input').attr('disabled','disabled');
}