Javascript函数检查vb变量

Javascript Function checking vb variable

本文关键字:变量 vb 检查 函数 Javascript      更新时间:2023-09-26

我正在使用下面的函数,但它确实工作,谁能指出什么是错误的。

vb变量是由数据库查询生成的。

window.onload function PostCodeChecker() {
if (<%= sPostalCode %> !== 'SW') {
alert("This is not an SW Postal Code");
}
}

这里真正发生的是您的服务器端代码正在交换您放置<%= sPostalCode %>的值,并将结果发送给浏览器。如果sPostalCode是(比如说)"NW10",你会得到

window.onload function PostCodeChecker() {
if (NW10 !== 'SW') {
//  ^--- ERROR (unless you happen to have a client-side variable by that name, which I'm guessing you don't)
alert("This is not an SW Postal Code");
}
}

所以你需要在它周围引号(你需要添加缺失的=),像这样:

//            v-- was missing
window.onload = function PostCodeChecker() {
if ('<%= sPostalCode %>' !== 'SW') {
//  ^--- here          ^--- and here
alert("This is not an SW Postal Code");
}
}

…所以浏览器会看到:

window.onload = function PostCodeChecker() {
if ('NW10' !== 'SW') {
alert("This is not an SW Postal Code");
}
}

假设字符串中没有任何'字符,或者其他字符会导致(当服务器端处理完成并将结果发送到浏览器时)无效的JavaScript字符串字面值。

当然,你可以这样做:

<% If sPostalCode <> "SW" Then %>
window.onload = function() {
alert("This is not an SW Postal Code");
}
<% End If %>

…因为它是一个服务器端变量,所以您可以在服务器端进行测试。


旁注:这种表达式形式:

something = function name() { ... };

…在各种浏览器上都有问题,最明显的是IE。它被称为命名函数表达式,因为它是一个函数表达式,其中函数有一个名称(在本例中为name)。在IE中,这会导致创建两个完全独立的函数,这可能非常令人困惑。忍不住再次:

第一个错误是:

window.onload function PostCodeChecker() {

你错过了赋值运算符,并给它一个名字(在IE irc中内存泄漏):

window.onload = function () {

第二个错误是:

if (<%= sPostalCode %> !== 'SW') {

可能会输出类似

的内容
if (SW !== 'SW') {

SW为未定义值。你可能想把ASP包在引号里,并确保你输出的是JS和HTML安全的。

主要的错误是你在客户端做测试,当你可以很容易地在服务器上做测试。

pseudo -code因为我不做ASP:

<% if (sPostalCode == "SW") {
       print 'alert("This is not an SW Postal Code");'; 
   }
%>

(但将其完全从JS中取出,只是将其作为页面中的文本是通常的,也是最可靠的方法)。

如果没有引号,它将查找与sPostalCode的值同名的变量

试题:

window.onload = function PostCodeChecker() {
    if ('<%= sPostalCode %>' !== 'SW') {
        alert("This is not an SW Postal Code");
    }
}

有两个问题

  1. 你忘记了=所以你的语法是无效的

  2. 你应该考虑在ASP完成它的工作后,生成的 Javascript是什么样子的。sPostalCode被替换,所以如果它的值是" SW "那么你的条件结束如下:

    if (SW !== 'SW')
    
修复:

window.onload = function PostCodeChecker() { // <---- equals
   if ('<%= sPostalCode %>' !== 'SW') {         // <---- quotes in the JS
      alert("This is not an SW Postal Code");
   }
}

^我还添加了缩进,使您的代码更清晰。我强烈建议你这样做。

你还应该考虑当sPostalCode包含任何会破坏Javascript语法的字符时会发生什么;例如:a '。你应该相应地在ASP中准备或"转义"变量