gpt4 book ai didi

javascript - 为什么我可以从像 onblur 这样的事件内部调用 JavaScript 函数,但是当我调用 底部的函数时,它会变成 'undefined' ?

转载 作者:行者123 更新时间:2023-12-02 15:21:05 24 4
gpt4 key购买 nike

这是所发生情况的基本示例。我可以理解,我可能在定义函数之前在 body 中调用该函数,但是为什么将 javascript 放在页面底部如此常见?我知道我的老板会说使用底层 javascript 那么我该怎么办?

此外,根本问题是首次加载页面时,如果服务器有用户名,我需要运行 CheckUsername() 函数。那么有没有更好的方法来有条件地做到这一点?

<body>
<input type="text" name="username"
id="username" onblur="CheckUsername()"
maxlength="30" value="@username" />

@if (username.length > 5)
{
<script>
CheckUsername(); // this is the one that's undefined
</script>
}

@section bottomjavascript
{
<script language="JavaScript">

function CheckUsername() {
// does work
}

</script>
}


</body>

实际的正文标签来自主布局。但是为什么我可以在input标签中使用CheckUsername,但不能只在页面上调用它呢?

我决定删除 @section Bottomjavascript,这样它就不会移动 body 标记下方的任何脚本。这并不是一个真正的解决方案,因为此页面不再使用 JavaScript 的主部分,但它现在可以工作

最佳答案

将函数定义放在第一次调用之前。当您第一次调用它时,解析器不知道 CheckUsername() 是什么。所以这样做:

<body>
<input type="text" name="username" id="username" onblur="CheckUsername()" maxlength="30" value="@username" />

@section bottomjavascript
{
<script language="JavaScript">

function CheckUsername() {
// does work
}

</script>
}
<script>
$(document).ready(function() {
if (@{username.length} > 5)
{
CheckUsername(); // this is the one that's undefined
}
});
</script>

</body>

我通常将这些函数放在自己的js文件中,并在文档的头部引用它们。这样当我需要它时就可以在下面定义它。

如果您将代码放入 document.ready 中,那么所有 js 文件都应该被加载,您将能够运行该函数。为此,您必须将 razor 中的 if 语句放入 js 中。

关于javascript - 为什么我可以从像 onblur 这样的事件内部调用 JavaScript 函数,但是当我调用 <body> 底部的函数时,它会变成 'undefined' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34049974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com