Пользователь должен выбрать пол.
HTML
<form ...>
<select id="id_gender" name="gender" onchange="hideMaidenName(this.value)">
<option value="M">Male</option>
<option value="F">Female</option>
<option value="U" selected="selected">To be defined</option>
</select>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js">
Если пол мужского пола, то предупреждает пользователя, что они должны очистить девичью фамилию вручную. Затем они могут продолжаться. Но в этом случае мы автоматически меняем пол на «U».
Не могли бы вы помочь мне разобраться в ситуации. В консоли я проверил, что я хотел бы передать в производственный код.
В консоли:
var gender = $('#id_gender')
gender
[<select id="id_gender" name="gender" onchange="hideMaidenName(this.value)">…</select>]
gender.val()
"U"
Но когда я использую этот код в производстве, я получаю исключение, что пол не является функцией. Я могу сделать код выполнить так:
Рабочий код:
var maiden_name = $('#id_maiden_name');
function hideMaidenName(gender) {
if ($('#id_gender').val() == 'M') {
if (maiden_name.val() != "") {
$('#id_gender').val('U')
alert("Clear maiden name!");
return;
}
}
}
</script>
И далее идет мой провал.
Не работает код:
var gender = $('#id_gender');
var maiden_name = $('#id_maiden_name');
var maiden_name_row = $('#id_maiden_name_row')
function hideMaidenName(gender) {
if (gender.val() == 'M') {
if (maiden_name.val() != "") {
gender.val('U')
alert("Claear maiden name!");
return;
}
maiden_name_row.hide()
}
else {
maiden_name_row.show()
}
}
Половина рабочий код (уменьшенная функциональность, как мне не удалось изменить значение пола обратно 'U':
var gender = $('#id_gender');
var maiden_name = $('#id_maiden_name');
function hideMaidenName(gender) {
if (gender == 'M') {
if (maiden_name.val() != "") {
alert("Claear maiden name!");
return;
}
}
}
Вопросов :
В чем разница между $ ('# id_gender') и var gender = $ ('# id_gender'). Я имею в виду, почему первый работает отлично, а последний - исключение.
Почему в половине рабочего кода gender == 'M' отлично работает? Пол, кажется, является элементом, значение которого я собираюсь проверить. Но здесь у нас есть ценность, которая хранится в полу.
У меня есть рабочий код, но я ищу гендерный элемент дважды. Как предотвратить двойное обнаружение, если это возможно?
'$ («# id_gender»)' возвращает массив, подобный объекту со всеми элементами, которые соответствуют селектору. 'var gender = $ ('# id_gender')' присваивать переменную этому массиву, как объект. –
@Alex Char, другими словами, в поле мы помещаем массив. Но почему поведение отличается от другого? Почему мы находим там только строку (см. Пример полурабочего кода). И так далее, все вопросы здесь, чтобы остаться. – Michael