2014-09-05 2 views
0

У меня есть сайт, который использует чистый JavaScript (без JQuery), и я хотел бы помешать событиям в текстовом поле. Текстовое поле находится в таблице, и на странице может быть несколько таблиц (с их собственными идентификаторами). Текстовое поле динамически создается Javascript и добавляется в таблицу после того, как таблица HTML доставляется в браузер.; Как добавить аргументы к событиям?

Я пытаюсь захватить событие onkeyup и знаю таблицу, содержащую текстовое поле, вызвавшее событие.

Функция, привязанная к событию onkeyup, вызывается с аргументом, самим событием, которое дает информацию о только что нажатом ключе. Это здорово, я могу это получить, и я знаю ключ, все хорошо.

textbox.onkeyup = my.namespace.textboxAge; 

my.namespace.textboxAge = function (event) { 
    console.log("I got the event:" + event.ToString()); }; 

Что мне нужно сделать, это приложить дополнительную информацию для вызова функции, так что я получаю исходное событие, плюс таблица или таблица ID.

Я думал о закрытии в ловушку в справочной таблице, когда я прилагаю мой обработчик к событию OnKeyUp, что-то вроде ...

var table = document.getElementByID("table5"); 
textbox.onkeyup = function (event,table) { 
    console.log("I got event:" + event.ToString() + " on table " + table.id); } 

Но это не работает, событие не устанавливается, когда функция закрытия прилагается, поэтому она остается пустой, когда срабатывает onkeyup.

Я уже работал над этим, но я смущен тем, как добавлять информацию к событиям и хотел бы знать, если это возможно, и как это сделать.

ответ

0

Удалить аргумент из функции события. В вашем коде переменная table получает перезапись в вызове функции события. Если опустить его из списка параметров, то есть исходное значение:

var table = document.getElementByID("table5"); 
textbox.onkeyup = function (event) { 
    console.log("I got event:" + event.ToString() + " on table " + table.id); } 
+0

Да, но я хочу, таблицы переменных, то весь смысл. Как мне получить событие, а также таблицу? Спасибо за попытку. –

+0

Вы * получаете * переменную таблицы, вот и вся точка закрытия. Что именно с кодом, который я ввел, это не то, что вы хотите? – jlahd

+0

А, может быть, я неправильно понял. Когда вы сказали, что «закрытая переменная таблицы переписывается», я предположил, что я не получу переменную таблицы. Мне нужно попробовать. Спасибо за помощь. –

0

В дополнение к информации, на которой была нажата клавиша, исходное событие будет содержать указатель на элемент DOM, вызвавшего это событие. .srcElement, или что бы это ни было в разных браузерах. Это будет ссылка на текстовое поле, которое запустило событие. Не можете ли вы просто следить за деревом DOM из этого элемента, зациклив на .parentNode и посмотреть, какие из ваших таблиц вы нажмете?

Edit:

ОК, так и с тем, что, глядя на ваш код выше, вы можете добавить дополнительную информацию в самом обработчике. Это один из способов сделать это, пожалуй, самый «правильный»:

textbox.onkeyup = function (extra1, extra2) { 
    alert(extra1); 
    alert(extra2); 
    alert(event); 
}.bind(null, 'foo','bar'); 

Вот скрипку: http://jsfiddle.net/it_turns_out/u0cnzpwd/2/

+0

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

+0

Хорошо, отредактировано сейчас, на то, что я думаю, вы ищете –

+0

Это выглядит интересно, я раньше не использовал bind. Я настрою его, попробую и вернусь к нему. Я постараюсь сделать это в конце недели, спасибо, очень благодарен. –

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