有关使用警报的问题

时间:2011-02-24 00:33:32

标签: html

我在研究settimeout时遇到了这段代码。 settimeout在单击按钮5秒后执行警报。

    <input type="button" name="clickMe" value="Click me and wait!" 
onclick="setTimeout('alert(\'Surprise!\')', 1000)">

然而,我看到里面的警报字符串有一种前所未见的格式。 \'发生在'惊喜之前! \”。有什么用?

5 个答案:

答案 0 :(得分:3)

这是缩进的命令:alert('Surprise!')。它包含两个引号 在这种情况下,命令将作为字符串传递给setTimeout 此字符串由引号分隔:'string' 这看起来像'alert('Surprise!')',这是无效的语法,因为它的解析如下:

'alert('    // string
Surprise!   // nonsense
')'         // another string

因此字符串中的引号是转义以表示“这不是字符串的结尾”。

这是关于尽可能最糟糕的方法。更好的方法是交替使用两种可用的报价类型:

'alert("Surprise!")'

在这种情况下,这会搞乱,因为它会混淆HTML解析器。

更好的方法是传递匿名函数而不是字符串:

setTimeout(function () { alert('Surprise!'); }, 1000)

更好的方法是不引人注目的Javascript,其中您没有使用HTML onclick属性,而是以编程方式将Javascript附加到DOM元素:

<input type="button" name="clickMe" value="Click me and wait!" id="clicker">

<script type="text/javascript" charset="utf-8">
    document.getElementById('clicker').onclick = function () { 
        setTimeout(function () { alert('Surprise!'); }, 1000);
    };
</script>

答案 1 :(得分:2)

这是escape character。反斜杠意味着引号不是字符串的结尾,而是它的一部分。反斜杠不存在,会出现语法错误。

当您的Javascript内联为HTML属性时,处理转义字符会变得棘手。我建议阅读Unobtrusive Javascript以了解避免处理此问题的方法。

答案 2 :(得分:1)

那些反斜杠是为了逃避引号内的引号。通常可以写

alert('Surprise!');

但在这种情况下,整个语句将作为字符串传递。这将是语法错误

'alert('Surprise!');'

因为我们希望第二个和第三个引号作为字符串的一部分。所以我们逃避它。

'alert(\'Surprise!\');'

答案 3 :(得分:0)

这用于从消息中获取摘要。否则它将把它作为两个字符串

one ='alert('

second =')'

惊喜!将放在这两个字符串之间。

答案 4 :(得分:0)

这是一个转义字符串。如果要删除反斜杠,则会显示:

..."setTimeout('alert('Surprise!')',1000)">

在第二个'之后,字符串将完成,您的语句现在将是一个错误,因为它超出了引号。