2015-08-03 3 views
0

Я борюсь с захватом события Enter в текстовом поле и попробовал несколько разных примеров, которым пока не повезло. Текстовое поле находится внутри таблицы в шаблоне виджета html. Я на доджо 1.9.не удалось захватить Вход в текстовое поле

Вот определение внутри файла шаблона:

<td id="BBC"><input type="text" name="SrchWithin" 
placeholder="Search within Last Name" id="SrchWithin" 
dojoType="dijit.form.TextBox" value="" style="width: 12em;" /> 
/td> 

Вот некоторые попытки, основанные на ряде примеров в Интернете:

require(["dijit/form/TextBox"]); 
require(["dojo/on","dojo/keys"], 
function(on, keys) { 
    on(digit.byId("SrchWithin"), "keypress", function(evt) { 
    console.log("key = " + evt.charOrCode); 
    }); 
}); 

Эта попытка окончилась с цифры не определены.

Большинство других просто никогда не получил событие:

var taskDblClkHndl = dojo.connect(dojo.byId("SrchWithin"), "onKeyUp", function(event) { 
    console.log("key pressed"); 
}); 


require([ "dojo/dom-construct", "dojo/on", "dojo/query", "dojo/keys", 
"dojo/domReady!" ], function(domConstruct, on, query, keys) { 
    query("input[type='text']").on("keydown", function(event) { 
    console.log("event.keyCode" + event.keyCode); 
    }); 
}); 

<script 
type="dojo/connect" event="onKeyDown" args="evt"> 
    var key = evt.charOrCode; 
    if (key == dojo.keys.ENTER) { 
    console.log("dojo.keys.ENTER"); 
    } 
</script> 

Так много способов сделать это, и я не могу получить один рабочий ... Любые комментарии о том, что мне не хватает?

Update: возможно, это вопрос контекста, где я пытаюсь этот код ... Я поставил следующий код, где я пытался предложение, используя запрос и он не показывает поля ввода я ожидал :

var testit = dojo.query("input, button, textarea, select", this.domNode).forEach(
function(inputElem) { 
    console.log(inputElem); 
    } 
); 

Однако, когда я добавил этот же код для метода пост() в моем файле widget.js, я нашел текстовое поле SrchWithin ... Не уверен, но, как добавить код виджета или если я могу использовать точку прикрепления из моего файла main.jsp ...

+0

Ваши примеры/попытки кажутся вроде бы повсюду - пытаетесь ли вы захватить события клавиатуры для виджета dijit или непосредственно для ввода элементов? Вы используете устаревшие Dojo или AMD? 'Цифра.byId' никогда не будет определяться, так как библиотека виджета Dojo - 'dijit', а не' digit'. –

+0

Попытки повсюду, потому что я пытаюсь столько решений, сколько могу найти в этой теме :-) У меня есть текстовое поле, определенное в шаблоне. Определение выше. Я хочу знать, когда в этом текстовом поле нажата Enter. Я исправил «цифровую» проблему, и теперь я получаю TypeError: dijit.byId не является функцией. Я использую AMD. Guilherme, я пробовал этот код и никогда не получал console.log msg. Я помещаю этот код в основной .jsp-файл после создания виджета. Я использую id из html (id = "SrchWithin") –

+0

Добавил обновление к моему описанию проблемы с образцом кода. Основываясь на некотором коде, который я использую для ввода полей ввода, контекст кажется неправильным, он не выгружает поля из виджета. Следствие. –

ответ

0

Вы были почти там. Посмотрите на этот фрагмент кода:

JSFiddle

Только эта часть кода должна быть достаточно для того, чтобы получить то, что вы хотите работать:

require([ "dojo/dom-construct", "dojo/on", "dojo/query", "dojo/keys", "dojo/domReady!" ], function(domConstruct, on, query, keys) { 
    query("input[type='text']").on("keydown", function(event) { 
    console.log("event.keyCode" + event.keyCode); 
    }); 
}); 
0

Этот подход работает для меня .. . Я добавил данные додзё присоедините-событие

<td id="BBC"><input type="text" name="SrchWithin" 
placeholder="Search within Last Name" id="SrchWithin" 
dojoType="dijit.form.TextBox" value="" style="width: 12em;" 
data-dojo-attach-point="SrchWithinAttach" 
data-dojo-attach-event="onKeyUp:keyPressed" /> 
</td> 

Затем добавляет метод Keypressed() на мой пользовательском виджет (этот пример использует ключи, поэтому должен додзё/ключи требуют и функция список ...)

keyPressed : function(event){ 
if (event.keyCode === keys.ENTER) { 
    console.log("Enter pressed..."); 
    } 
}, 

Я до сих пор изо всех сил, чтобы получить значение текстового поля ... Пытались registry.byId («SrchWithin»), но переменная присваивается неопределен Также dijit.byId но он вернулся dijit.byId не является функцией.

Итак, я попытался добавить parser.parse(), но это не удалось произнося BorderContainer, который включает в текстовое поле "уже зарегистрирован"

UPDATE: это работало для меня:

var box0 = dojo.byId("SrchWithin"); 
console.log(box0.value) 

Еще раз спасибо за предложения.

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