2010-02-17 4 views
1

Я пытаюсь изменить значение атрибута onblur текстового ввода после завершения загрузки страницы.Как программировать изменение входных данных?

Когда я делаю следующее, он просто запускает функцию:

ip.onblur = stopCalcUpInt(this,10);

Когда я делаю следующее, у меня есть успех:

ip.onblur = function onblur(event){stopCalcUpInt(this,10);}

К сожалению, вся суть это возможность динамически установить второй параметр для stopCalcUpInt(). Если я жестко кодирую значение для него ... он отлично работает ... но любые попытки передать varibles на это не удается ... вместо того, чтобы поместить значение переменной в качестве второго параметра, он просто помещает простой текст переменной само название. Здесь идеально, что я пытаюсь сделать:

ip.onblur = function onblur(event){stopCalcUpInt(this,this.value);}

В этом примере, когда я предупрежу ip.onblur я получаю:

ответ

2

Ответ на этот вопрос был очень прост, но не слишком очевиден. Вместо того, чтобы:

ip.onblur = function onblur(event){stopCalcUpInt(this,this.value);}

Я сделал это:

ip.setAttribute('onblur','stopCalcUpInt(this,\'' + ip.value + '\');');

прекрасно работает ... больше не стучал головой о стену! Ура!

+0

См. Мой ответ выше, он также должен работать – Bob

2

Это зависит от того, что this предназначено для обозначения к. В обработчике события this относится к элементу, на котором выполняется событие. Если это то, что вы хотите, тогда ваш код выглядит хорошо, как написано; this будет указывать на ip.

Если вы намерены this обратиться к this извне обработчика событий и не ip, попробуйте следующее:

var self = this; 
ip.onblur = function(event) { stopCalcUpInt(self, self.value); }; 
+0

'this' относится к элементу ввода html, который я пытаюсь изменить атрибут onblur. Проблема в том, что по какой-то причине фраза «this.value» интерпретируется как строка вместо ссылки на переменную. Эпическое разочарование во всем этом заключается в том, что я могу жестко закодировать числовое значение, и оно работает СОВЕРШЕННО. – DirtyBirdNJ

+0

Ваш код в порядке. Поскольку @Dancrumb сообщает, что «ip.onblur» выводит исходный код для функции. Ваша проблема должна лежать в другом месте. Попробуйте оповещение в 'stopCalcUpInt' и посмотрите, какое значение передается. –

1
ip.onblur = function() {stopCalcUpInt(this,this.value);} 
+0

Удаление аргумента (события) функции не делает ничего по-другому, насколько я могу сказать – DirtyBirdNJ

+0

, это не единственная разница. говоря «ip.onblur = function onblur» неправильно. удалить второй 'onblur'. вы дважды называете эту функцию. – geowa4

1

ip.onblur является обработчик события ... т.е. это функция

Теперь, когда вы вызываете функцию, FF покажет вам исходный код для этой функции (если она определена пользователем).

Вот почему вы видите простой текст имени переменной.

Для обработчика событий this - это элемент, который в данный момент обрабатывает событие. Итак, если вы устанавливаете обработчик onblur окна ввода, у вас будет доступ к содержимому этого окна ввода.

Пример кода, который вы предоставили:

ip.onblur = function onblur(event){stopCalcUpInt(this,this.value);} 

должен работать правильно. Попробуйте

ip.onblur = function onblur(event){alert(this.value); stopCalcUpInt(this,this.value);} 

, если вы хотите быть уверены,

+0

В первый раз (до внесения каких-либо изменений) я предупреждаю ip.onblur, в поле предупреждения отображается значение в HTML, заключенное в кавычки (например, «6»). Другие функции, которые зависят от этого, могут правильно использовать значение «6». Когда я выполняю присвоение this.value на нем ... эти функции больше не работают должным образом, заставляя меня поверить, что что-то NaN или undefined проходит мимо. Я действительно не знаю ... Я очень смущен и расстроен. – DirtyBirdNJ

+0

Вы пробовали мой предложенный код с добавленным предупреждением ... что предупреждают? – Dancrumb

0

ли stopCalcUpInt ожидает номер во втором параметре? Атрибут value вернет строку, в то время как в вашем жестком кодированном примере вы передаете тип номера.Попробуйте это:

ip.onblur = function onblur(event){stopCalcUpInt(this,this.value * 1);} 

Как объяснено в QuirksMode:

Поскольку умножение принимает число, JavaScript делает строку номер, , если это возможно.

Смежные вопросы