Я разрабатываю форму в своем приложении rails. Возникла проблема при использовании функции скрытия / отображения. Сейчас он настроен на отображение соответствующих текстовых полей: onchange. Как сделать так, чтобы соответствующие текстовые поля отображались при загрузке страницы просмотра? Если есть параметр для категории, скажем «Другое», и пользователь загружается в форму. Другие варианты не загружаются вместе с ним. Им придется щелкнуть что-нибудь еще и снова щелкнуть Другое, чтобы текстовые поля загрузились.
application.css
function showMe(e) {
var strdisplay = e.options[e.selectedIndex].value;
var e = document.getElementById("Other");
var x = document.getElementById("Pcba");
if (strdisplay != "Other") {
e.style.display = "none";
} else {
e.style.display = "block";
}
if (strdisplay != "PCBA") {
x.style.display = "none";
} else {
x.style.display = "block";
}
}
ПОСМОТРЕТЬ
<div class = "form-group">
<label>Category</label>
<%= f.select(:category, [["Select...","Select..."],["PCBA","PCBA"], ["Other","Other"]], {}, { :class => 'form-control', :onchange => "showMe(this)", :onload => "showMe(this)", :default => 'Select...'})%>
</div>
<div class = "form-group" id = "Other" style = "display: none">
<label>Quantity</label>
<%= f.number_field :quantity, class: "form-control", placeholder: "Enter Quantity", required: true %>
</div>
<div id = "Pcba" class = "form-group" style = "display: none">
<label>Serial Number</label>
<%= f.text_field :serial, class: "form-control", placeholder: "Enter Serial", required: true %>
<br>
<label>Software Revisions</label>
<%= f.text_field :serial, class: "form-control", placeholder: "Enter Serial", required: true %>
</div>
да, пробовал, но та же проблема.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я добавил console.info в вашу функцию showMe, чтобы подтвердить, что она не вызывалась при загрузке страницы (если вы не используете консоль для отладки, это очень полезно!). Я не верю, что загрузка на ваш выбор что-то сделала.
Это код, который я создал, чтобы проверить, как исправить вашу проблему:
<html>
<head>
<script>
function showMe(e) {
console.info('showMe called');
var strdisplay = e.options[e.selectedIndex].value;
var e = document.getElementById("Other");
var x = document.getElementById("Pcba");
if (strdisplay != "Other") {
e.style.display = "none";
} else {
e.style.display = "block";
}
if (strdisplay != "PCBA") {
x.style.display = "none";
} else {
x.style.display = "block";
}
}
window.onload = function() {
showMe(document.getElementById('category'));
};
</script>
</head>
<body>
<div class = "form-group">
<label>Category</label>
<select id = "category" onchange = "showMe(this)" onload = "showMe(this)">
<option>Select...</option>
<option selected>PCBA</option>
<option>Other</option>
</select>
</div>
<div class = "form-group" id = "Other" style = "display: none">
<label>Quantity</label>
<input id = "quantity" />
</div>
<div id = "Pcba" class = "form-group" style = "display: none">
<label>Serial Number</label>
<input id = "serial" />
<br>
<label>Software Revisions</label>
<input id = "serial" />
</div>
</div>
</body>
</html>
Я использую window.onload для вызова вашей функции showMe при загрузке страницы. Поскольку ожидается передача вашего элемента select, я использую document.getElementById, чтобы получить элемент и передать его функции showMe. Вы можете сделать и то, и другое с помощью jQuery.
Сообщите мне, если это сработает!
Вы пытались вызвать свою функцию при загрузке страницы?