1

我有一段 JavaScript 代码循环遍历表单元素并构建一个对象。我混合了 HTML 输入字段和 ASP.NET 输入字段。ASP.NET 将字段的 ID 更改为 xxxxx_yyyy_id 的形式,所以我尝试使用 split 函数来提取原始 id。

 // Iterate over all the text fields and build an object
 $(':text').each(function () {

     var tokens = this.id.split("_");
     if (tokens.length = 3) {
         // Assume this is a .net inputbox - extract the original id
         inFormData[tokens[2]] = this.value;
     } else {             
         inFormData[this.id] = this.value;
     }
 });

单步执行上面的代码,第一个id是ctl00_ContentPlaceHolderCol1_forenameField,所以就运行tokens.length = 3的代码。在第二次迭代中,id 是 forenameField2,所以我希望 tokens.length 为 1,但它实际上是 3。else 语句永远不会运行。

这可能很简单,但我无法解决。如果我检查令牌数组,它在第二次迭代中只有 1 个元素。我还尝试在每次迭代后将 array.length 设置为 0。

任何帮助表示赞赏。

4

4 回答 4

5

纠正这个:

== instead of =. === is more better


     if (tokens.length == 3) {
         // Assume this is a .net inputbox - extract the original id
         inFormData[tokens[2]] = this.value;
     } else {             
         inFormData[this.id] = this.value;
     }
于 2012-04-30T16:13:39.890 回答
2

改变你= 3=== 3

目前,您tokens.length每次都在覆盖。

注意:===首选,==因为它是一个精确的相等检查。两个相等的版本会在比较之前尝试将两个操作数转换为相同的类型,这是 1. 不必要的,2. 低效的,3. 有时容易出错。

于 2012-04-30T16:14:54.523 回答
2

这就是为什么在测试时应该始终将常量放在首位的原因。如果您忘记了比较符号,则会引发错误:

if( 3 = tokens.length ) // throws an error
if( 3 == tokens.length ) // ok
if( 3 === tokens.length) // ok
于 2012-04-30T16:19:10.200 回答
1

从:

if (tokens.length = 3) {

到:

if (tokens.length == 3) {
于 2012-04-30T16:14:21.680 回答