Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript作用域,辅助值_Javascript_Html_Jsc3d - Fatal编程技术网

Javascript作用域,辅助值

Javascript作用域,辅助值,javascript,html,jsc3d,Javascript,Html,Jsc3d,我在.php文件中有一个小方框,但在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"); fu

我在.php文件中有一个小方框,但在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的变量。一个是要转换的参数,因此它的作用域就是该函数。另一个在changex中使用,除非在函数之外声明,否则它的作用域将在函数中。在changex中更改tx不会影响translate中的tx。

changex仅存在于JSC3D.Matrix3x4.prototype.translate中。要从元素的on*属性调用changex,它应该是全局作用域,即window.changex=function。。。或在通常情况下在全局范围内定义way@Jaromanda非常感谢!我不知道为什么,但现在它可以双向工作,双向工作,并且不在框中输入任何值,它会改变对象的位置,这是我想要的,但要控制,所以默认情况下它应该始终位于中心位置,赋值应该沿x轴平移?@Anders很好,我做到了,非常感谢。实际上,当我再次尝试时,它正在工作,但对象并没有像它应该的那样位于屏幕的中心,因为我没有在小框中写入任何值??我不知道为什么,但使用这个解决方案,你知道我如何使它工作,所以当我输入值时,它会改变框的位置吗?我添加了一些来解释变量范围。不确定它是否有助于你回答问题。我不确定我是否理解,我不知道是否可以用你问题中的信息来回答。如果你不能自己解决这个问题,你应该问一个新问题。你知道我怎么调用这个函数吗:JSC3D.Matrix3x4.prototype.translate=functiontx,ty,tz这样我就可以调用这个函数而不是changex,这样我就不会有任何作用域问题了:首先你需要一个JSC3D.Matrix3x4类型的对象。如果该对象被称为obj,那么您只需调用obj.translate1、2、3。但是,如果你想知道其他事情,你应该发布一个新问题,其中包含所有相关信息。非常感谢:我做到了,现在它运行良好,只需为所有axis添加相同的内容: