如何使用Javascript验证克隆的输入
How to validate cloned inputs using Javascript?
我在使用identity元素时遇到问题。基本上,我想创建一个简单的html表单,用户可以在其中输入与某个代码相关的电话号码,该号码需要验证并发送到某个文件夹。
然而,我想让用户可以输入他们想要的电话号码。因此,对我来说,使用克隆方法似乎是合乎逻辑的。然而,使用这种方法的负面影响是身份总是相同的。换句话说,如果一个电话号码的输入不正确,我就无法向用户推荐与验证规则不符的输入文本。
我已经尝试了几种方法,但我根本不知道如何将标识元素"Tel"增加1,或者验证每个输入文本。
下面你可以找到我的代码。我使用了getElementsByName方法,因为Firefox会自动为每个输入名称分配一个递增的数字。然而,如果我能找到一种方法,将所使用的每个输入文本的标识增加1,我会更喜欢这种工作方式。我对每一个建议都持开放态度,但我更喜欢使用纯javascript,因为我不熟悉JQuery。
提前Thx。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SMS</title>
</head>
<body>
<script type="text/javascript">
var counter = 0;
function moreFields() {
counter++;
var newFields = document.getElementById('readroot').cloneNode(true);
newFields.id = '';
newFields.style.display = 'block';
var newField = newFields.childNodes
for (var i=0;i<newField.length;i++) {
var theName = newField[i].name;
if (theName)
newField[i].name = theName + counter;
}
var insertHere = document.getElementById('writeroot');
insertHere.parentNode.insertBefore(newFields,insertHere);
}
window.onload = moreFields;
function checkPhone() {
var x=document.getElementsByName("Tel").length;
var TotTel = new Array();
for(i = 0; i < x; i++)
{
TotTel[i] += document.getElementsByName('PhoneNumber')[i].value;
if(TotTel[i] == "" || TotTel[i] == null)
{
alert("Please enter a phone number");
return false;
}
else if(isNaN(TotTel[i]))
{
alert("You can only enter numbers");
return false;
}
}
alert("Validation ok");
return true;
}
</script>
<div id="readroot" style="display:none">
<input type="button" value="Remove field" onclick="this.parentNode.parentNode.removeChild(this.parentNode);" /><br /><br />
Phone number: <input name="PhoneNumber" class="Tel" id="Tel" />
SMSCode: <select name="SMSCodes">
<option>Codes</option>
<option value="B2BNL"> B2BNL </option>
<option value="B2BFR"> B2BFR </option>
<option value="B2BEN"> B2BEN </option>
<option value="B2CNL"> B2CNL </option>
<option value="B2CFR"> B2CFR </option>
<option value="B2CEN"> B2CEN </option>
<option value="AMNL"> AMNL </option>
<option value="AMFR"> AMFR </option>
<option value="PMNL"> PMNL </option>
<option value="PMFR"> PMFR </option>
<option value="PMPNL"> PMPNL </option>
<option value="PMPFR"> PMPFR </option>
<option value="BWAYAM"> BWAYAM </option>
<option value="BWAYPM"> BWAYPM </option>
<option value="BWAYPMP"> BWAYPMP </option>
<option value="BWAY18"> BWAY18 </option>
<option value="SPEOSNL1114"> SPEOSNL1114 </option>
<option value="SPEOSFR1114"> SPEOSFR1114 </option>
<option value="SPEOSNL1417"> SPEOSNL1417 </option>
<option value="SPEOSFR1417"> SPEOSFR1417 </option>
<option value="SPEOSNL1721"> SPEOSNL1721 </option>
<option value="SPEOSFR1721"> SPEOSFR1721 </option>
</select><br /><br />
</div>
<form name="SMSForm" action="" onsubmit="checkPhone()" method="post">
<span id="writeroot"></span>
<input type="button" onclick="moreFields()" value="More Phone numbers" />
<input type="submit" value="Send" />
</form>
</body>
</html>
您的代码中有多个错误,如果您修复了它,它应该可以工作。
var x=document.getElementsByName("Tel").length;
上面的表达式计算为0,因为"Tel"是文本字段的id。
for(i = 0; i < x; i++){
请注意,firefox将1分配给第一个文本字段,而不是0。
TotTel[i] += document.getElementsByName('PhoneNumber')[i].value;
上面的代码行会出错,因为它只返回名称为"PhoneNumber"的节点,而不是"PhoneNNumberSomething"。你可以试试
TotTel[i] += document.getElementsByName('PhoneNumber'+i)[0].value;
例如,PhoneNumber1是一个唯一的名称,因此该方法返回一个元素数组。请注意,用户可以再添加几个电话号码字段,然后删除第一个字段。生成的数字序列将是1、3、4…但PhoneNumber2不存在。
我想有两种方法来处理这个问题。
第一种是构建一个数组或类似的数组,在克隆节点时存储节点,在用户删除节点时从数组中删除,这样你就可以从该数组中找到任何克隆的节点。例如
arr[counter] = document.getElementById('readroot').cloneNode(true);
第二种方法使用jqueryhttp://api.jquery.com/attribute-contains-selector/
$("form input[name*=PhoneNumber]")
上面的选择器将在表单中选择所有名称为PhoneNumber的文本字段。
- 是否有一种方法可以使用公共代码库在Java和JavaScript中进行输入验证
- 输入验证&使用javascript或asp返回
- 带有输入验证的Javascript
- 表单和输入验证
- 输入验证仅在lur上
- 使用jQuery进行输入验证
- 如何在 JavaScript 中将输入验证为数字
- 使用正则表达式进行输入验证
- Int 输入验证 - 解析服务器云代码
- jQuery/JS 输入验证
- 使用 Angular 要求输入启用注册:需要输入/验证
- 比较输入验证HTML JavaScript中的两个输入值
- simpleCart(js)将表单输入验证添加到电子邮件结账提交中
- Javascript:输入验证
- 淘汰计算和输入验证
- 使用javascript addevent监听器在引导程序html表单上输入验证
- 使用JavaScript进行输入验证
- HTML 5表单输入验证
- 禁用输入类型=数字的输入验证
- AngularJs表单中的输入验证