【发布时间】:2018-07-20 19:06:15
【问题描述】:
我有一个 ID 为 userName 的用户输入,并且在用户完成在文本框中输入文本然后将其存储在变量(目录路径)中后,我试图使用 $("#userName").val() 获取用户输入文本,但是,我对$("#userName").val() 没有定义。我认为未定义的发生是因为文本字段在运行时尚未准备好,所以我试图设置一个回调函数以在我的目录路径中使用,但是当我在下面执行console.log("This is the field name: " + getUserName()); 时仍然未定义是我的回调函数:
function getUserName(){
$("#userName").keyup(function(){
console.log(this.value);
return this.value;
});
}
我在这里尝试在我的目录变量中使用它(变量filePath 在函数getUserName()之外):
var filePath = "/my/path/to/the/file/" + getUserName() + ".txt";
但是,当我这样做时,我仍然不确定。我在这里做错了吗?
更新:
name.html:
<div class="subArea" id="pvDiv">
<p id="nameP">Name:
<input id="userName" class="userInput" type="text" placeholder="Enter Name">
</p>
</div>
【问题讨论】:
-
提供你输入的html
-
您提供的不是“回调”功能。当调用该函数时,您有一个在元素上注册事件处理程序的函数(是的,每次调用该函数时都会重新绑定)。
-
getUserName()函数实际上并没有返回任何东西。它将keyup事件的事件处理程序附加到id 为userName的元素,然后退出,默认返回undefined。处理keyup事件的函数将this.value返回到事件处理例程。如果你想在getUserName()函数中获取用户名,return $('#userName').val();会更好。 -
在次要注意 - 您不能从事件处理程序返回值,因此
return this.value在这种情况下毫无意义 -
您的两个最简单的选择是让
getUserName()返回$("#userName").val(),或者如果您想在每次击键时更新文件路径,只需将filePath = "my/path/" + this.value + ".txt"放入您的keyup处理程序中。确保在事件处理程序之外定义filePath,以便它更新并在您需要的任何地方可见。
标签: javascript jquery