2011-09-30 142 views
-6

我需要知道我的JavaScript语句是否正确?我很困惑单引号和加号。我的JavaScript语句是否正确?

document.f.SQL.value ='\('+ 
    document.f.SQL.value + a[i] + 
    ' >= \''+ document.f[a[i]+"_A"].value + 
    '\' AND '+ a[i] +' <= \''+ 
    document.f[a[i]+"_B"].value + 
    '\) or DATEADD'+'\('+ 
    'dd, 0, DATEDIFF'+'\('+ 
    'dd, 0,'+ a[i] +'\)) = \''+ 
    document.f[a[i]].value + 
    '\''; 
+4

没有语法错误,但没有办法知道代码是否工作。你没有告诉我们你在做什么。 – 0x499602D2

+0

如果你试图描述你想要你的代码做什么,它会有所帮助。 –

+0

这是我尝试在javascript中获取字符串的查询,并且粘贴的代码属于where子句SELECT CH_INSERT_DATE FROM CMS_HITLIST WHERE(CH_INSERT_DATE> ='2011-09-22'AND CH_INSERT_DATE <='2011-09-22')或DATEADD(dd,0,DATEDIFF(dd,0,CH_INSERT_DATE))='2011-09-22' –

回答

4

我粘贴你的代码中Closure Compiler和所使用的这给了没有任何错误,所以语法是正确的。生成的代码是:

document.f.SQL.value = "(" + document.f.SQL.value + a[i] + " >= '" + document.f[a[i] + "_A"].value + "' AND " + a[i] + " <= '" + document.f[a[i] + "_B"].value + ") or DATEADD" + "(" + "dd, 0, DATEDIFF" + "(" + "dd, 0," + a[i] + ")) = '" + document.f[a[i]].value + "'";

我用这个选项:

  • 优化:空白仅
  • 格式:漂亮的打印

尽量避免这种复杂的线条。利用变量。用下面的方法可以得到相同的结果:

var old = document.f.SQL.value + a[i]; 
var sql_a = document.f[ a[i] + "_A" ].value; 
var sql_b = document.f[ a[i] + "_B" ].value; 
var whatever = document.f[ a[i]  ].value; 
// (old) >= 'sql_a' AND 
var sql = "(" + old + ") >= '" + sql_a + "' AND "; 
// A <= 'sql_b') 
sql += a[i] + " <= '" + sql_b + "') " 
// or DATEADD(dd, 0, DATEDIFF(dd, 0, A)) = 'whatever' 
sql += "or DATEADD(dd, 0, DATEDIFF(dd, 0, " + a[i] + ")) = '" + whatever + "'; 
document.f.SQL.value = sql; 

问题是,试着将字符串分成较小的部分。我没有在上面的小部分分割查询,这取决于你。

1

如果您的字符串中需要单引号而且没有双引号(内部),则使用双引号分隔字符串,并且不需要转义单引号。

我通常更喜欢使用单引号来分隔JavaScript中的字符串,特别是当我倾向于使用HTML字符串时,因为我更喜欢使用双引号来表示属性。尽管您可以使用单引号或双引号,但没有像PHP或其他语言那样的功能差异。

你的表情很难看懂。考虑简化它,将其放入几条指令或查找/编写某种可重用的令牌替换例程。

转义括号\(看起来没有必要,并且连接两个字符串文字' + '

document.f[a[i]+"_A"].value这样的表达式,如果在使用它们之前将它们分配给有意义的变量,它们将更易于阅读。