#javascript #html
#javascript #HTML
Вопрос:
В форме у меня есть следующее обязательное выпадающее окно:
<select id="SelectBox" name="SelectBox" required>
<option value="">Please Select ...</option>
<option value="val1">val1</option>
<option value="val2">val2</option>
<option value="val3">val3</option>
<option value="val4">val4</option>
</select>
У меня также есть следующее текстовое поле:
<input type="text" name="textbox" id="textbox">
Я пытаюсь сделать текстовое поле обязательным, только если val4 выбрано из выпадающего списка с использованием требуемого атрибута (красная рамка вокруг текстового поля). Я сделал это с помощью группы переключателей, но нужно сделать то же самое с этим выпадающим списком.
Любая помощь будет принята с благодарностью. Спасибо.
Комментарии:
1. Используете ли вы jquery?
2. Добавление
required
атрибута не требует автоматического ввода текста в элементе. Должен ли ввод текста также требоваться в#textbox
элементе?3. @guest271314
#textbox
будет использоваться в jQuery, который не помечен тегом.4. @NewToJS »
#textbox
будет использоваться в jQuery, который не помечен». ? Как#textbox
селектор связан с jQuery?5. @guest271314 ну, поскольку входные
ID
textbox
данные и jQuery использует#
для определенияID
‘s и.
для определения aclass
, использование#textbox
будет относиться к использованию селектора jQuery. Как еще вы могли бы использовать#textbox
чистый javascript?
Ответ №1:
Это должно сработать, чтобы сделать ввод текста атрибутом required
и добавить красную рамку, если вы выберете параметр val4 только в поле выбора.
var select = document.getElementById("SelectBox");
var textBoxElement = document.getElementById("textbox");
select.onchange = function(){
var selectedString = select.options[select.selectedIndex].value;
if(selectedString == 'val4'){
textBoxElement.required = true;
textBoxElement.style.border="1px solid red";
}else{
textBoxElement.required = false;
textBoxElement.style.border="";
}
}
Смотрите рабочую скрипку: https://jsfiddle.net/nwk1tkb7/5 /
Комментарии:
1. Что, если я выберу val2 после выбора val4.
2. странно… Я вижу, что jfiddle работает, но когда я обращаюсь к своей странице, он не работает. Может ли быть причина? Страница, которую я использую, находится на сайте WordPress, но я не думаю, что это имеет значение, потому что другие функции JS работают. Затем я также скопировал и вставил ваш html и JS на обычную HTML-страницу, и это все равно не сработало. И я добавил теги открывающего и закрывающего скрипта.
Ответ №2:
Один из подходов, который я бы предложил, заключается в следующем:
// use of a named function, to be called via Elememt.addEventListener:
function elementRequiredIf(event) {
// 'this' will be the <select> element in this example, however
// the 'this' is automatically passed from Element.addEventListener
// (as is the 'event' object, though we don't use that here):
var changed = this,
// here we find the conditionally-required element, using
// the id of the element stored in the custom data-* attribute
// of the <select> element, here we retrieve that attribute-
// value from the dataset object, stored as a property of the
// Element:
requiredElement = document.getElementById(changed.dataset.required_elem_id),
// as above, we use the same approach to retrieve the
// value that makes the other element required:
ifRequiredValueIs = changed.dataset.required_if_value;
// here we set the required property of the element to
// true (if the <select> value is equal to the required
// value, or false if they are unequal:
requiredElement.required = changed.value === ifRequiredValueIs;
}
// here we find the <select> element via its id,
// and bind an event-listener for the 'change' event,
// which, upon a change event being fired, calls the
// named function (note the deliberate, required, lack
// of parentheses following the function name):
document.getElementById('SelectBox').addEventListener('change', elementRequiredIf);
function elementRequiredIf() {
var changed = this,
requiredElement = document.getElementById(changed.dataset.required_elem_id),
ifRequiredValueIs = changed.dataset.required_if_value;
requiredElement.required = changed.value === ifRequiredValueIs;
}
document.getElementById('SelectBox').addEventListener('change', elementRequiredIf);
input:required {
box-shadow: 0 0 0.5em #f00;
}
<form>
<select id="SelectBox" name="SelectBox" data-required_elem_id="textbox" data-required_if_value="val4" required>
<option value="">Please Select ...</option>
<option value="val1">val1</option>
<option value="val2">val2</option>
<option value="val3">val3</option>
<option value="val4">val4</option>
</select>
<input type="text" name="textbox" id="textbox">
<button type="submit">Submit</button>
</form>
Ссылки:
Комментарии:
1. Установка
required
атрибута не требует автоматического ввода текста в элементе. По<form>
-прежнему может быть отправлено без какого-либо текстового значения в элементе; например, пустая строка в качестве значения. OP не уточнил, требуется ли пользователю фактический ввод текста в элемент.2.@guest271314: настройка
required
, безусловно, не позволяет Chrome отправлять форму без ввода, хотя, по общему признанию, я не тестировал кроссбраузерность. Также стоит отметить, что я устанавливаюrequired
свойство, а не атрибут (который не всегда отражает обновленное значение свойства).3. В jsfiddle попробуйте выбрать
val4
, сфокусироваться на#textbox
элементе, нажать клавишу пробела, нажатьSubmit
4. Да, это делает элемент обязательным, если OP хочет знать, как определить наличие значения, то это отдельная тема, которая полностью отсутствует в заданном вопросе. Я рад добавить подробности, если требуется, но это пока не запрошено.