Ориентация на элемент / виджет Dojo, что я делаю не так? - PullRequest
4 голосов
/ 04 февраля 2010

Я совершенно новичок в додзё ... и немного опираюсь на свой опыт работы с jQuery ...

У меня есть несколько таких элементов:

<input name="info1" value="" style="width:52px" contstraints="{pattern:'#'}" dojoType="dijit.form.NumberTextBox"/>

<input name="info2" value="" style="width:52px" contstraints="{pattern:'#'}" dojoType="dijit.form.NumberTextBox"/>

<input name="info3" value="" style="width:52px" contstraints="{pattern:'#'}" dojoType="dijit.form.NumberTextBox"/>

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

dojo.addOnLoad(function()
{
    dojo.query('input[name^=info]').connect('onkeyup',function(e)
    {
        console.log('oh yeah');
    });
});

Что я делаю не так, на что мне обратить внимание ???

Ответы [ 2 ]

2 голосов
/ 04 февраля 2010

К сожалению, dojo.query() вернет только собственные DOM-узлы. Я думаю, что вы хотите вернуть визуализированный виджет Dijit.

Для этого вам необходимо назначить идентификаторы входов и использовать dijit.byId().

Кроме того, в отличие от собственных имен событий HTML, имена событий Dojo чувствительны к регистру. Так, onkeyup относится к собственному HTML и отличается от имени события Dojo onKeyUp.

Я думаю, у вас также может быть дополнительный 't' в contstraints.

Пример использования:

<html>
<head>
<title>Test</title>
<link type="text/css" rel="stylesheet" href="dijit/themes/tundra/tundra.css"/>
</head>
<body class="tundra">

<input id="input1" name="input" type="text"dojoType="dijit.form.NumberTextBox"/>

<script type="text/javascript" src="dojo/dojo.js"
        djConfig="isDebug: true, parseOnLoad: true"></script>

<script type="text/javascript">
dojo.require("dijit.form.NumberTextBox");
dojo.addOnLoad(
    function() {
        dojo.connect(dijit.byId("input1"), 'onKeyUp',
                function(e) { console.log('oh yeah'); });
    }
);
</script>

</body>
</html>
0 голосов
/ 04 февраля 2010

Dojo позволяет легко объявлять события без необходимости проходить через запросы. Просто поместите событие прямо в вашей разметке. Смотри http://docs.dojocampus.org/quickstart/events#events-with-dijit

<input name="info1" value="" style="width:52px" constraints="{places:0}" dojoType="dijit.form.NumberTextBox" onkeyup="console.log('key up')" />

Это более кратко, и вам не нужно называть и искать ссылки только для того, чтобы связать событие.

В любом случае, abboq прав, обычно вам нужно иметь дело с виджетом напрямую, а не с узлом DOM, поскольку создание экземпляра Dijit часто приводит к реструктуризации DOM, так что он выглядит сильно отличающимся от исходной страницы. Виджет действует как абстракция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...