Необходимо навесить валидатор на элемент input (не форма, просто октрытый элемент)
Элемент создается кодом
<?phpecho 'label>Для ввода <input id="mytext" type="text" onkeypress="my_handler(this)" size="30"></label>';
?>
Все работало пока не решил в соответствии со стандартом написания скрипта в Drupal 7
Сделать обертку скрипта:
function my_handler(e){
/* что то проверяем по введенному тексту
}
})(jQuery);
Как правильно вызывать обработчики jQuery (javascript) из маркапа?
Или надо писать команды по фрэймфорку ajax?
Хотелось минимальными средствами обойтись.
Комментарии
Вам не помешает подучить JavaScript и jQuery, ибо у Вас проблемы с основами, функция my_handler будет недоступна за пределами анонимной функции, простейший способ в Вашем случае - определить её как метод объекта window -
window.my_handler = function(e){ ...
, работать будет, но так делать нельзя - это типичный "индусский код", правильно будет навесить событие через jQuery в attach behavior друпала.Браво! Такой типичный олдскульный рунет. Могли ли в рунете родиться такие сокращения как IMHO или что то подобное? о нет, конечно нет. ок.
Я бы не назвал это "правильно", я бы назвал это вынужденно. В какой момент будет повешено событие?
$.documnt.ready? Если так, то знаете ли, до этого ready надо еще дожить...
Собственно вопрос был как это сделать через markup.
... а вот уже нашел вот прямо сейчас в голову две мысли пришло - пишу прямо здесь:
1. А что собственно мешает мне вынести определение функции из обертки? Боязнь многоверсионности, которую Drupal поддерживает через обертку?
2. А что вообще мешает мне определить функцию в самом маркапе в тэгах ? Если уж мне этот маркап так сдался, то может это и резонно? Ну хорошо, ладно, разносить код - это конечно страшно неудобно но ведь мой вопрос был о том как?
В моем случае я сделал так:
/* что то делаем пока страница грузится */
jQuery(#sisi)......
}
function($){
/*...
ну а здесь пишут только заматерелые и важные drupalисты
*/
})(jQuery);
Я конечно понимаю что делаю. behaivor еще даже не родился... а тут такое
Ну а когда я подучу немного Jquery и javascript я сделаю замыкание, в том случае если понадобиться функционал из обертки. Вот так:
function($){
/*...
ну а здесь пишут только заматерелые и важные drupalисты
*/
my_handler = function(){
$('sisi').animate(...);
};
})(jQuery);
и теперь свободно в маркапе могу писать
<input type="button" onclick="my_handler()" >
Спасибо.
wtf?
есть такое понятие, как дизайн кода
наберите в гугле "drupal ajax behaviors"
выполнение скриптов, связанных с манипуляцией DOM, до полной загрузки этого самого DOM в 99.9999999% случаев не самая разумная идея.
ответ был дан в 1м комменте
На самом деле, в Вашем случае - ничего
есть такое понятие, как дизайн кода, а ответ был дан в 1м комменте
а вообще, есть такое понятие, как дизайн кода, он присутствует в любой нормальной системе, разве что кроме битрикса, там что ни проект, то собрание тараканов разработчика(по крайней мере из того, что попадалось мне)
P.S. на прочтение руководств по основам JS с того же javascript.ru ушел бы час, мой ответ появился на следующий день после появления топика, Ваш вариант появился через 3 дня, что довольно иррационально, не находите?
Ну тут надо уточнить, что писал свой плагин.
есть также понятие инкапсуляции, безотносительно к чему либо. Далее дело личного стиля. Мне лично во всех смыслах нравится способ навешивать события через маркап. Буквально во всех. Это на 200% браузеро- и библиотеко- независимо. Когда можно через маркап всегда так делаю.
Нет ну конечно если пойти на принцип то можно и подождать полной загрузки DOM. Загрузка DOM на мобильных устройствах может идти до полминуты. Будем ждать? Мне лично совсем не нужно чтобы Яндекс поймал статистику отказа от посещения страниц.
А вот принципиально не хочу. Система живая - сегодня так а завтра по другому будет. Смысл? Спросить да, это много времени не отнимет.
В последнем примере я привел способ заведения функции в обертку без behaviors. Более короткий, более понятный, более лаконичный и ничем не противоречащий никаким принципам.
Если бы мне надо было таскать данные со страницы на сервер и обратно, то ... вообщем байк в автобус затаскивать не нужно, он тоже ездит
Drupal.mymodule = Drupal.mymodule || {
my_handler: function () {
$('sisi').animate(...);
}
};
})(jQuery);
ну а потом
onkeypress="Drupal.mymodule.my_handler()"
Отличие в том, что объект Drupal уже объявлен и его не нужно замыкать. Но в целом суть та же. Плюс открытые перспективы к расширению.
Ссылки по теме кому интересно:
https://www.drupal.org/node/756722
http://habrahabr.ru/post/161039/
не могу найти материал по описанию javascript объекта Drupal - как формируется, как живет и т.п.
behaviors никто не отменял! он не только заменит $docement.ready, но и навесит событие на динамически загруженные блоки.
НО!!!
http://graker.ru/news/2011/02/10/neskolko_slov_o_drupalbehaviors_i_docum...
плагин к чему? собственному фреймворку?
Судя по всему написанному, инкапсуляцию Вы понимаете чуть больше, чем ни хрена
Исходники открыть религия не позволяет?
Тогда зачем веб разработкой заниматься? Система живая - сегодня так а завтра по другому будет(телепатию изобретут или еще какую хрень), а тем более Drupal...
мне приходится очень часто сталкиваться с подобными чужими трудами в работе, когда это "коротко, понятно и локанично" со временем превращается в "длинно, непонятно и убого" даже для его автора, при том до такой степени, что автор попросту делает ноги, а глядя на все это, становится непонятно, зачем заканчивать институты и даже школы, ибо лично у меня еще в начальной школе код был еще более "краток, понятен и локаничен"
то есть, по Вашему мнению, если посетитель в момент загрузки страницы увидит "анимацию сисек"(судя по Вашему примеру кода), и по фиг, что на странице до сих пор нет остального контента, да и не факт, что будет, то обязательно останется на странице?
sg85!
Вы ничего не ответили по существу вопроса. НИ-ЧЕ-ГО.
Молчите уж.
Собственно самопиар - это единственная мотивация Ваших постов.
ПО поводу sisi (по французски да-да) каждый читает в меру своей озабоченности.
Очки лучше заказывать у окулиста, а не покупать за 1 евро у цыган
Отнюдь, мне всего лишь доставляет удовольствие общение с Вами, а параллельно пытаюсь предостеречь Вас от этого
Случаем не Вы являетесь разработчиком модуля ePayment(Paybox) для престы?
Вы считаете что откровенным хамством можно достичь поставленных целей?
Данный вами код вы сами же и раскритиковали как плохой.
Хватит флудить.
нет, не являюсь. Разговор закончен. Вопрос закрыт.
я таки отметил Ваш код знаком качества? Или Вы считаете, если его же написать по другому/взять из другого источника, он станет таки лучше?
а Вы ничего не путаете?