此代码采用输入的10位数电话号码并对其进行格式化,以便DB的所有条目遵循相同的格式。代码按原样工作,但问题是HTML是动态生成的,并且Id发生了变化。它始终以" phone"但是会添加数字和短划线来破坏代码(例如,电话-59-0-1)" name"和"班"保持不变,但似乎无法使用这些元素让它发挥作用。
<form name="registration_form" id="registration_form">
<input type="text" name="phone" id="phone" class="ee-reg-page-questions ee-reg-page-text-input phone" />
</form>
<script>
var x = document.getElementById("phone");
x.addEventListener("blur", formatPhone, true);
function formatPhone() {
var obj = document.getElementById("phone");
var numbers = phone.value.replace(/\D/g, ''),
char = {0:'(',3:') ',6:'-'};
obj.value = '';
for (var i = 0; i < numbers.length; i++) {
obj.value += (char[i]||'') + numbers[i];
}
}
</script>
此处尝试使用getElementByClassName
:
function formatPhone() {
var obj = document.getElementsByClassName("ee-reg-page-questions ee-reg-page-text-input phone")[0];
var numbers = phone.value.replace(/\D/g, ''),
char = {0:'(',3:') ',6:'-'};
obj.value = '';
for (var i = 0; i < numbers.length; i++) {
obj.value += (char[i]||'') + numbers[i];
}
}
答案 0 :(得分:2)
变化:
var obj = document.getElementsByClassName("ee-reg-page-questions ee-reg-page-text-input phone")[0];
为:
var obj = document.getElementsByClassName("phone")[0];
该函数只接受一个类,而不是包含该元素所有类的字符串。
整个代码应该是:
var x = document.getElementsByClassName("phone")[0];
x.addEventListener("blur", formatPhone, true);
function formatPhone() {
var obj = document.getElementsByClassName("phone")[0];
var numbers = obj.value.replace(/\D/g, ''),
char = {0:'(',3:') ',6:'-'};
obj.value = '';
for (var i = 0; i < numbers.length; i++) {
obj.value += (char[i]||'') + numbers[i];
}
}
如果您只想要包含所有三个类的元素,请使用:
var obj = document.querySelector(".ee-reg-page-questions.ee-reg-page-text-input.phone");
答案 1 :(得分:0)
尝试使用: document.getElementsByName(“phone”)[0];
这意味着您正在尝试访问由函数document.getElementsByName(“phone”)给出的数组的第一个元素。
通过这个你不必了解元素的id。
答案 2 :(得分:0)
我有点同意Barmar,但我做了一个快速搜索,已经有了一个可行的解决方案:Can you use a wildcard in getElementById?
他们使用querySelectorAll
和一些外卡来获得你想要的东西(而不是getElementById
)。
答案 3 :(得分:0)
简单地这样做:
var x = document.getElementsByClassName("phone");
for (var i = 0; i < x.length; i++) {
x[i].addEventListener("blur", function () {
var obj = this,
numbers = obj.value.replace(/\D/g, ''),
char = {
0: '(',
3: ') ',
6: '-'
};
obj.value = '';
for (var i = 0; i < numbers.length; i++) {
obj.value += (char[i] || '') + numbers[i];
}
}, true);
}