На странице есть div со свойством display:none:
При выборе переключателя этот блок показывается пользователю. Код следующий:
$form['cat_fset']['category'] = array(
'#type' => 'radios',
'#prefix' => '
function doBlock(id) {
document.getElementById(id).style.display = "block";
}',
'#required' =>TRUE,
'#default_value' => $category,
'#options' => lot_get_category_list(1),
'#attributes' => array('onClick' => 'doBlock("lmi")'),
);
Все отлично работает - но если например при оправке формы возникла какая то ошибка, то этот блок скрывается, и поле в котором возникла ошибка не видно.
PS в коде пропущена разметка javascript... непонятно как настроить режим чтобы она не стиралась
Комментарии
jQuery попробуйте
drupal_add_js + внешний фйлик + прописывание событий на загрузке событий.
вот такой инлайн JS - зло. неизвестно как он себя вести будет.
не делайте так
visualjquery.com - памятка. сделайте через JQuery всю событийку.
да, я понимаю дорога длинная, зато потом все будет проще.
Спасибо за совет Я вообще в душе люблю когда все сделано как правильно
Просто вообще не понимаю что за зверь jquery, но разобраться похоже стоит.
Может есть где примеры простые разобранные как оно все работает?
Был бы премного благодарен, если бы вы помогли бы с моим примером.
Хотя бы как показать поле 2 при выборе значение из поля - радио 1
Заранее спасибо
visualjquery.com - там есть как события обрабатывать
довольно устаревшая памятка но вам хватит.
мне примеров никто не давал
писать код за вас мне неинтересно
как пример http://drupal.org/project/advimage там есть обработка событий на jquery. посмотрите
ориентиры я дал
Долго читал мануалы... смысл понял.
Не совсем понял - обязательно ли делать отдельный файл?
Нельзя ли просто вставить также в префикс к элементу:
'#type' => 'radios',
'#prefix' => '<script type="text/javascript">
$("#cat").click( function()
{
$("#lmi").css("style","block");
});
</script><div class="category-select">',
'#suffix' => '</div><div class="clear"></div>',
'#required' =>TRUE,
'#default_value' => $category,
'#options' => lot_get_category_list(1),
'#attributes' => array('id' => 'cat'),
Чем плохо, кроме того что у меня не работает ?
Вообще вопрос изначальный это не решает.
Проблема в том что при возникновении форма полностью не перестраивается. И нужно просто понять как в таком случае сделать исходный div изначально видимым?
событие должно прописываться когда модель документа(Document Object Model) будет готова повле его загрузки
при разборе inline javascript вот эта штука $("#cat") ничего не захватит
#cat еще не готов ибо. нет его. не построился
ты все пытаешься сделать не особо напрягаясь
не получится
Сделал файл lot_create.js. Код следующий:
$("#cat").click( function()
{
$("#lmi").css("style","block");
});
});
Положил в подпапку модуля js
Теперь нужно подключить:
Куда правильно вставлять эту строку?
Как проверить что файл подключился?
ну тут уж думаю догадаться можно. путь верный
еще взять firebug и посмотреть как оно все работает
Смотрю код страницы
Вижу запись, то есть файл подключился похоже
Но блок не показывается.. - почему не пойму
Нашел пару косяков - теперь в firebug в списке скриптов появился мой файл. но блог все равно не показывается по клику на радио баттоне.
Как можно отловить что не так. Как можно проверить событие вообще вызывается?
Сейчас вот код такой в файле:
$(document).ready(function(){
$("#cat-radio").click( function()
{
$("#lmi").css("style","display:block");
});
});
Пытаюсь добавить такую строку:
Чтоб проверить вызывается ли событие - ничего не происходит.
Может быть у меня модуль jquery стоит только стандартный? поэтому не работает видел на форуме где то что нужно какой то более продвинутый модуль
firefox + firebug и смотреть там в консоли
отладчик нужен
В итоге получилось показать скрытый блок при помощи jquerн. Теперь может подскажете как его показать при нажатии кнопки submit при наличии ошибок. Как поймать событие?
Спасибо!
.click() туда
доп. класс в css через drupal_add_css() который сделает данный блок видимым в случае ошибок принудительно(если submit проходил)
мужик, у тебя все на руках есть
смелее епта
{
$('#lmi').css('display','none');
$('.category-select').click(function()
{
$('#lmi').css('display','block');
}
);
}
);
В упор не пойму какое событие надо написать/добавить чтобы поймать случай когда есть ошибки на странице
на #lmi навесить класс.
и в css по селектору сделать #lmi с тем классом видимым.
По какому событию навешивать класс?
В итоге получилось поймать посчитав количество элементов класса messages - код такой:
{
$('.category-select').click(function()
{
$('#lmi').css('display','block');
}
);
if ($('.messages').length>0)
{
$('#lmi').css('display','block');
}
}
);
вариант
я бы по другому делал и до этого не додумался
Спасибо за ликбез и придание пути