我在使用Javascript事件将参数传递到Javascript函数时遇到了问题。我想要一种将先前定义的变量传递给函数的方法。我的Javascript代码目前看起来如下:
<script type="text/javascript">
var field1 = "Field 1 is selected";
var field2 = "Field 2 is selected";
function fieldSelect(field) {
var message = field;
document.getElementById("explain").innerHTML = message.toString();
}
</script>HTML如下所示:
...
<input type="text" id="field1" onFocus="fieldSelect(field1)">
<input type="text" id="field2" onFocus="fieldSelect(field2)">
...
<p id="explain"></p>因此,当您单击一个字段时,字符串变量将被传递到函数中,段落标记将显示表单下选择的字段。
发布于 2016-02-28 21:53:27
尽管达山为你提供了一个解决办法,但你的问题却是另一回事。
这个页面中的HTML结构如下所示:
<html>
<head>
<script type="text/javascript">
var field1 = "Field 1 is selected";
var field2 = "Field 2 is selected";
function fieldSelect(field) {
var message = field;
document.getElementById("explain").innerHTML = message.toString();
}
</script>
<head>
<body>
<form>
<input type="text" id="field1" onFocus="fieldSelect(field1)">
<input type="text" id="field2" onFocus="fieldSelect(field2)">
</form>
<p id="explain"></p>
</body>现在,您的脚本标记被放置在head中,您创建了两个名为field1和field2的变量。
稍后,在body中,使用in field1和field2创建两个输入元素。浏览器使用id自动创建变量,这些变量引用带有id的元素。在head中,您将field1设置为"Field 1 is selected",但是一旦在body中使用id field1创建了输入元素,field1的值就会被覆盖,field1引用输入元素。
这就是为什么在您的fieldSelect函数中,您尝试打印字符串"Field 1 is selected",但是最终打印了输入元素[object HTMLInputElement]。
您可以做的是将脚本标记移到body元素的内部和末尾,或者如果脚本标记必须停留在头部,则应该给输入元素或变量不同的名称。
发布于 2016-02-28 21:31:20
使用bind()创建带有预先指定的初始参数的函数。
var field1 = "Field 1 is selected";
var field2 = "Field 2 is selected";
function fieldSelect(field) {
var message = field;
document.getElementById("explain").innerHTML = message.toString();
}
var callback1 = fieldSelect.bind(undefined, field1);
var callback2 = fieldSelect.bind(undefined, field2);
<input type="text" id="field1" onFocus="callback1()">
<input type="text" id="field2" onFocus="callback2()">发布于 2016-02-28 21:52:11
当事件被触发时,与元素的id同名的变量似乎是根据该元素创建的。它隐藏具有相同名称的全局变量,这是以前定义的。您仍然可以从窗口作用域访问全局变量,如下所示:
<input type="text" id="field1" onFocus="fieldSelect(window.field1)">
<input type="text" id="field2" onFocus="fieldSelect(window.field2)">https://stackoverflow.com/questions/35688368
复制相似问题