[英]jQuery to Javascript adding required attribute
So I have the following jQuery code that I've built out that checks whether a on change event has been triggered on #rtk5 and then either removes or adds the 'required' attribute.因此,我构建了以下 jQuery 代码,用于检查是否在 #rtk5 上触发了 on change 事件,然后删除或添加了“required”属性。
Works perfectly in jQuery :在 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');
}
});
});
I would like to convert it to JavaScript with a function call, but I can't seem to figure out how to properly do it.我想通过函数调用将其转换为 JavaScript,但我似乎无法弄清楚如何正确执行此操作。
Error:错误:
TypeError: rtk5req.getAttribute is not a function
Here is my attempt:这是我的尝试:
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();
Updated code : Removed the repetitive change call更新代码:删除了重复的更改调用
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();
Updated code #2 :更新代码#2 :
Thanks all for all the hard work, there's one small issue that I'm still experiencing and had to make some tweaking - When I uncheck the checkbox, it doesn't remove the required tag placed on rtk5Declaration
from which it did in the jQuery.感谢所有人的辛勤工作,有一个小问题我仍然遇到并且必须进行一些调整 - 当我取消选中该复选框时,它不会删除
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');
}
});
});
Thanks so much all!非常感谢大家!
Since you only have one element you should be using its ID instead of its class, and avoiding the complication caused by document.getElementsByClassName
returning a pseudo-array of elements instead of a single element.由于您只有一个元素,您应该使用它的 ID 而不是它的类,并避免由
document.getElementsByClassName
返回元素伪数组而不是单个元素引起的复杂性。
NB: use setAttribute
to change an attribute's value, or better yet (as shown in the code below) use the direct boolean property that mirrors the element's attribute . NB:使用
setAttribute
改变属性的值,或更好的是(如图所示在下面的代码)使用直接布尔属性,反射镜元素的属性。
document.addEventListener('DOMContentLoaded', () => {
const rtk_sel = document.getElementById('rtk5');
const rtk_dec = document.getElementById('rtk5Declaration');
rtk_sel.addEventListener('change', () => {
rtk_dec.required = !rtk_sel.checked;
});
});
Thanks all for the contribution, below is the working version which I have tweaked:感谢大家的贡献,以下是我调整过的工作版本:
var rtk5_selection = document.getElementById('rtk5');
var rtk5declaration = document.getElementById('rtk5Declaration');
function rtd3Declaration() {
if (!rtk5_selection.checked) {
rtd3declaration.removeAttribute('required');
} else {
rtd3declaration.setAttribute('required', 'required');
}
}
rtk5_selection.addEventListener('change', rtd3Declaration);
document.addEventListener('DOMContentLoaded', rtd3Declaration);
rtd3Declaration();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.