使用 for_each 遍历表单输入
Using for_each to iterate over form inputs
我有两种形式,一种是uk_inputs
,另一种是international_inputs
。当一个或多个 uk_inputs 被填写时,我想要它,以便禁用另一种形式的国际输入。
这目前在第一个 uk_input 被填写时有效,但我无法设法让它工作,但用 for_each 遍历所有它们。
第一个代码片段是它与第一个 uk_input 一起使用的地方,第二个代码片段是我尝试遍历所有代码片段的地方。
如果不清楚,请道歉。谢谢
$(document).ready(function() {
var uk_input = document.querySelector(".uk_input");
uk_input.onchange = function () {
international_input = document.querySelectorAll(".international_input")
international_input.forEach(function(international) {
international.disabled = uk_input.value
});
}
});
$(document).ready(function() {
var uk_input = document.querySelectorAll(".uk_input");
uk_input.for_each.onchange = function (uk) {
international_input = document.querySelectorAll(".international_input")
uk.international_input.forEach(function(international) {
international.disabled = uk_input.value
});
}
});
<%= fields.input :line_1, input_html: {class: "uk_input"} %>
<%= fields.input :line_2, input_html: {class: "uk_input"} %>
<%= fields.input :line_3, input_html: {class: "uk_input"} %>
<%= fields.input :town, input_html: {class: "uk_input"} %>
<%= fields.input :county, input_html: {class: "uk_input"} %>
<%= fields.input :postcode, input_html: {class: "uk_input"} %>
<%= fields.input :line_1, input_html: {class: "international_input"} %>
<%= fields.input :line_2, input_html: {class: "international_input"} %>
<%= fields.input :line_3, input_html: {class: "international_input"} %>
<%= fields.input :town, label: "City / Region", input_html: {class: "international_input"} %>
<%= fields.input :postcode, label: "Postcode / ZIP Code", input_html: {class: "international_input"} %>
每个函数的语法:
JavaScript 中 for each
函数的正确语法是:
let uk_inputs = document.querySelectorAll(".uk_inputs");
uk_inputs.forEach(input=>{
input.addEventListener("click",event=>{
//Code you want to run for every uk_inputs class input
})
})
此外,正如您在上面的代码中看到的那样,要分配一个事件侦听器,您必须引用要分配该事件的 DOM 元素。这是一个普通的 JavaScript 解决方案。这与 jQuery.
的结果完全相同
Here is a functional fiddle.如果你想看看的话。
根据您的问题进行调整:
$(document).ready(function() {
let uk_inputs = document.querySelectorAll(".uk_inputs"),
international = document.querySelectorAll(".international");
const enabledInternational = (enabled) => {
international.forEach(input => {
if (enabled) {
input.removeAttribute("disabled");
} else {
input.setAttribute("disabled", `${enabled}`);
}
})
}
uk_inputs.forEach(input => {
input.addEventListener("change", event => {
enabledInternational(event.target.value === "");
})
})
});
我有两种形式,一种是uk_inputs
,另一种是international_inputs
。当一个或多个 uk_inputs 被填写时,我想要它,以便禁用另一种形式的国际输入。
这目前在第一个 uk_input 被填写时有效,但我无法设法让它工作,但用 for_each 遍历所有它们。
第一个代码片段是它与第一个 uk_input 一起使用的地方,第二个代码片段是我尝试遍历所有代码片段的地方。
如果不清楚,请道歉。谢谢
$(document).ready(function() {
var uk_input = document.querySelector(".uk_input");
uk_input.onchange = function () {
international_input = document.querySelectorAll(".international_input")
international_input.forEach(function(international) {
international.disabled = uk_input.value
});
}
});
$(document).ready(function() {
var uk_input = document.querySelectorAll(".uk_input");
uk_input.for_each.onchange = function (uk) {
international_input = document.querySelectorAll(".international_input")
uk.international_input.forEach(function(international) {
international.disabled = uk_input.value
});
}
});
<%= fields.input :line_1, input_html: {class: "uk_input"} %>
<%= fields.input :line_2, input_html: {class: "uk_input"} %>
<%= fields.input :line_3, input_html: {class: "uk_input"} %>
<%= fields.input :town, input_html: {class: "uk_input"} %>
<%= fields.input :county, input_html: {class: "uk_input"} %>
<%= fields.input :postcode, input_html: {class: "uk_input"} %>
<%= fields.input :line_1, input_html: {class: "international_input"} %>
<%= fields.input :line_2, input_html: {class: "international_input"} %>
<%= fields.input :line_3, input_html: {class: "international_input"} %>
<%= fields.input :town, label: "City / Region", input_html: {class: "international_input"} %>
<%= fields.input :postcode, label: "Postcode / ZIP Code", input_html: {class: "international_input"} %>
每个函数的语法:
JavaScript 中 for each
函数的正确语法是:
let uk_inputs = document.querySelectorAll(".uk_inputs");
uk_inputs.forEach(input=>{
input.addEventListener("click",event=>{
//Code you want to run for every uk_inputs class input
})
})
此外,正如您在上面的代码中看到的那样,要分配一个事件侦听器,您必须引用要分配该事件的 DOM 元素。这是一个普通的 JavaScript 解决方案。这与 jQuery.
的结果完全相同Here is a functional fiddle.如果你想看看的话。
根据您的问题进行调整:
$(document).ready(function() {
let uk_inputs = document.querySelectorAll(".uk_inputs"),
international = document.querySelectorAll(".international");
const enabledInternational = (enabled) => {
international.forEach(input => {
if (enabled) {
input.removeAttribute("disabled");
} else {
input.setAttribute("disabled", `${enabled}`);
}
})
}
uk_inputs.forEach(input => {
input.addEventListener("change", event => {
enabledInternational(event.target.value === "");
})
})
});