【发布时间】:2020-04-27 06:20:28
【问题描述】:
因此,我构建了以下 jQuery 代码,用于检查是否在 #rtk5 上触发了 on change 事件,然后删除或添加“必需”属性。
在 jQuery 中完美运行:
// Make checkbox textboxes not required unless checked
$(document).ready(function() {
$('#rtk5').change(function() {
if ($('.rtk5ReqField').attr('required')) {
$('.rtk5ReqField').removeAttr('required');
}
else {
$('.rtk5ReqField').attr('required','required');
}
});
});
我想通过函数调用将其转换为 JavaScript,但我似乎无法弄清楚如何正确执行此操作。
错误:TypeError: rtk5req.getAttribute is not a function
这是我的尝试:
var rtk5req = document.getElementsByClassName('rtk5ReqField');
function rtk5Required() {
rtk5req.addEventListener('change', (e) => {
if (rtk5req.getAttribute('required')) {
rtk5req.removeAttribute('required');
} else {
rtk5req.getAttribute('required', 'required');
}
});
}
rtk5req.addEventListener('change', rtk5Required());
document.addEventListener('DOMContentLoaded', rtk5Required);
rtk5Required();
更新的代码:删除了重复的更改调用
var rtk5req = document.getElementsByClassName('rtk5ReqField');
function rtk5Required() {
if (rtk5req.getAttribute('required')) {
rtk5req.removeAttribute('required');
} else {
rtk5req.getAttribute('required', 'required');
}
}
rtk5req.addEventListener('change', rtk5Required());
document.addEventListener('DOMContentLoaded', rtk5Required);
rtk5Required();
更新代码#2:
感谢所有的辛勤工作,我仍然遇到一个小问题,必须进行一些调整 - 当我取消选中该复选框时,它不会删除放置在 rtk5Declaration 上的所需标签在 jQuery 中做了。
var rtk5_selection = document.getElementById('rtk5');
document.addEventListener('DOMContentLoaded', () => {
rtk5_selection.addEventListener('change', () => {
if (rtk5_selection.getAttribute('required')) {
document.getElementById('rtk5Declaration').removeAttribute('required');
} else {
document.getElementById('rtk5Declaration').setAttribute('required', 'required');
}
});
});
非常感谢!
【问题讨论】:
-
.getElementsByClassName返回元素的HTMLCollection,而不是单个元素。您需要对其进行迭代。 -
在您解决
rtk5req是一个伪数组而不是单个元素这一事实之前,它不会起作用。 -
已知有多少元素存在于这个特定的类中?它会影响任何答案的书写方式。
-
对,在这种情况下,我看到了问题所在 - 您应该将第二个代码更改为使用
var rtk5req = document.getElementById('rtk');而不是使用其类和更复杂的getElementsByClassName()函数。 -
并且不要使用更新的代码 - 正如@ajuni880 指出的那样,它有缺陷。
标签: javascript jquery