2015-09-08 4 views
0

У меня есть этот "небольшой ящик" в .php файле, но в HTML разделе:Javascript область применения, assiging значения

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; 

}; 

и console дает мне информацию о том, что функция 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; 
    } 
}; 
+2

'changex' существует в пределах' JSC3D.Matrix3x4.prototype.translate' только. Для 'changex', подлежащего вызову из атрибута on * для элемента, он должен быть глобально ограничен (т.е.' window.changex = function() '... или определен в глобальной области обычным способом –

+0

@Jaromanda X thank вы очень много! Я не знаю почему, но теперь работает в обоих направлениях и в обоих направлениях, не вводя никакой ценности в «поле», он меняет положение объекта, это то, что я хочу, но контролируюсь, поэтому по умолчанию он должен всегда нужно располагать в центре, а присваивание значения должно переходить по оси х? – commandos2389

+0

@ Аnders хорошая точка, я сделал это, спасибо – commandos2389

ответ

-1

Вы правильно определили, что это касается области. Так как функция 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, и если она не объявлена ​​вне функции, она будет обладать им. Изменение tx в changex не повлияет на tx в переводе.

+0

спасибо большое. действительно, когда я попытался снова, он работал, но объект не был расположен в центре на экране, как и должно быть, потому что я не писал никакой ценности внутри «маленькой коробки»? Я не знаю, почему , но используя это решение, знаете ли вы, как я могу заставить его работать, поэтому, когда я ввожу значение, он изменит положениеящик? – commandos2389

+0

Я добавил некоторые, чтобы объяснить область переменных. Не уверен, что это поможет вам с вашим вопросом. Я не уверен, что понимаю это, и я не знаю, можно ли ответить на эту информацию в вашем вопросе. Если вы не можете решить проблему самостоятельно, вы должны задать новый вопрос. – Anders

+0

Знаете ли вы, как я могу назвать эту функцию: JSC3D.Matrix3x4.prototype.translate = function (tx, ty, tz) , чем я могу назвать эту функцию вместо changex(), а затем у меня не будет никаких проблема области: – commandos2389