Javascript范围,赋值
Javascript scope, assiging values
我在 .php 文件中有这个 "small box",但在 html 部分:
X: <input name="translate_x" id="translate_x" type="text" maxlength="3" value="0" onchange=""/></br>
在其他文件 .js 中,我有:
JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
console.log("woop");
function changex() {
tx = parseFloat(document.getElementById('translate_x').value) + "<br>";
}
console.log(tx);
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
};
控制台给我的信息是未定义 changex() 函数。
我想要的是,当我在文本框中键入数字时,它会为 tx 赋值,有人可以帮我解决这个问题吗?
/////////////////////////////////////
I made It working perfectly now, here is code :
html file:
X: <input name="translate_x" id="translate_x" type="text" maxlength="3" value="0" onchange=""/></br>
.js file:
JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
var t=0;
t = parseFloat(document.getElementById('translate_x').value);
console.log(t);
if(t!=0)
{
console.log(this.m03);
this.m03 += tx;
tx=t;
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
}
else
{
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
}
};
您已正确识别出这是关于范围的。由于函数 changex
是在函数 JSC3D.Matrix3x4.prototype.translate
内部定义的,因此它仅存在于该函数中,并且只能从那里调用。为了能够从 onchange
事件中调用它,您必须全局声明它。这可以通过将其移出来完成,如下所示:
JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
console.log("woop");
console.log(tx);
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
};
function changex() {
tx = parseFloat(document.getElementById('translate_x').value) + "<br>";
}
但是,请注意现在有两个名为 tx
的变量。一个是 translate
的参数,因此它的作用域就是那个函数。另一个在 changex
中使用,除非它在函数外部声明,否则它的作用域将在其中。在 changex
中更改 tx
不会影响翻译中的 tx
。
我在 .php 文件中有这个 "small box",但在 html 部分:
X: <input name="translate_x" id="translate_x" type="text" maxlength="3" value="0" onchange=""/></br>
在其他文件 .js 中,我有:
JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
console.log("woop");
function changex() {
tx = parseFloat(document.getElementById('translate_x').value) + "<br>";
}
console.log(tx);
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
};
控制台给我的信息是未定义 changex() 函数。 我想要的是,当我在文本框中键入数字时,它会为 tx 赋值,有人可以帮我解决这个问题吗?
/////////////////////////////////////
I made It working perfectly now, here is code :
html file:
X: <input name="translate_x" id="translate_x" type="text" maxlength="3" value="0" onchange=""/></br>
.js file:
JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
var t=0;
t = parseFloat(document.getElementById('translate_x').value);
console.log(t);
if(t!=0)
{
console.log(this.m03);
this.m03 += tx;
tx=t;
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
}
else
{
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
}
};
您已正确识别出这是关于范围的。由于函数 changex
是在函数 JSC3D.Matrix3x4.prototype.translate
内部定义的,因此它仅存在于该函数中,并且只能从那里调用。为了能够从 onchange
事件中调用它,您必须全局声明它。这可以通过将其移出来完成,如下所示:
JSC3D.Matrix3x4.prototype.translate = function(tx, ty, tz) {
console.log("woop");
console.log(tx);
this.m03 += tx;
this.m13 += ty;
this.m23 += tz;
};
function changex() {
tx = parseFloat(document.getElementById('translate_x').value) + "<br>";
}
但是,请注意现在有两个名为 tx
的变量。一个是 translate
的参数,因此它的作用域就是那个函数。另一个在 changex
中使用,除非它在函数外部声明,否则它的作用域将在其中。在 changex
中更改 tx
不会影响翻译中的 tx
。