Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Delphi for PHP > Проблемы с DBRepeater |
Автор: Alex2011 25.11.12, 04:07 |
Привет всем! Обнаружил такую вот проблему. На DBrepeater лежат компоненты-Image и несколько Label. Image использую для имитации нажатия кнопок для действия(редактировать,удалить и т.д.) через AJAX. В событии onDetail компонента такой код <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> function DBRepeater1Detail($sender, $params) { $this->Label1->Caption=$this->Query1->caption; $this->Label2->Caption="id=".$this->Query1->id; $this->Image1->name="Image".$this->Query1->id; } в IDE все работает хорошо,на локальном апаче работает только при первоначальной загрузке страницы(т.е. только в новой сессии,насколько я понимаю).После обновления через AJAX по кнопке на странице или при обновлении средствами браузера имя Image становится одинаковым для всех выведенных и равным последнему(нижнему) на DBRepeater и приводит к тому,что нажимается только верхняя кнопка при клике на любой другой. C лэйблами такого нет!(И при присваивании им Link тоже все нормально) Мои танцы с бубном не увенчались успехом. В чем проблема не понятно,может даже и не в DBRepeater. Пробовал подсунуть php.ini локальному апачу от IDE и много чего еще-не помогает.Help! В аттаче-пример proba.zip (, : 1063) Бился день.Только отправил на форум-нашел решение-присваивать имя в событии onBeforeShow компонента Image и только через $sender <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> function imgTrashBeforeShow($sender, $params) { $sender->name="imgT".$this->Query1->id; } Дополнение. Вылезла еще одна проблема. Картинок-"кнопок" несколько в зависимости от текущего статуса документа. Клик по соответствующей кнопке вызывает отпределенные действия и изменяет статус документа на свой. Хотел показывать\прятать такие картинки-"кнопки" в зависимости от статуса документа(например, статус "в корзине"-тогда кнопка корзины уже не должна показываться),однако при первом же клике по к-л кнопке такие кнопки прячутся сразу на всех записях.(в IDE тоже). Решения пока нету. |
Автор: VESTERMEN 24.06.13, 17:58 |
Всем привет! Возникла проблемка с DBREPEATER ом. Точнее с Label- амии расположенные на нем, почему то не могу изменить размер шрифта цвет шрифта Label-ов. Использую HTML5Builder может кто сталкивался с этим недостатом? За ранее спасибо. |
Автор: vicis 14.07.13, 12:38 |
на сколько я помню в компонентах не ве свойства задействованы импользуй стили |
Автор: Alex2011 16.07.13, 14:18 |
Попробуй как у меня выше (через $sender). |
Автор: ssaich 02.03.15, 06:16 |
делаю так <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> function CheckBox1BeforeShow($sender, $params) { $sender->name="CheckBox".$this->MySQLTable1->A_ID; if ($this->MySQLTable1->A_PRICE_CHECK==1) { $sender->Caption="Оплачено"; $sender->Checked=true; } else $sender->Caption=$this->MySQLTable1->A_ID; } } Но отмечены получаются все чекбоксы Смотрю html код, а там все чекбоксы с одинаковым ID )) вопрос как из RadPhp сменить, сгенерить id ? через компонент - есть ли свойство ? |
Автор: Alex2011 02.03.15, 06:25 |
Попробуй добавить else $sender->Checked=false; чтобы получилось так. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> if ($this->MySQLTable1->A_PRICE_CHECK==1) { $sender->Caption="Оплачено"; $sender->Checked=true; } else $sender->Checked=false; |
Автор: ssaich 02.03.15, 06:30 |
Почему человек так устроен, когда проблема лежит не виду и порой решается штатно, в место этого лезем в дебри разбираем до основания предмет изучения, тратим часы на чтение книг и прочих вещей, а тут приходит "умный человек" и говорит "А вы магнитофон с паузы снимите, он и заиграет" ) )) Спасибо Alex2011 )) Добавлено Как все таки сменить ID ? ) |
Автор: Alex2011 02.03.15, 06:32 |
В предыдущей ветке ответил про компоненты. Да, тут еще в else {} включи код для Caption. Я не писал, думаю, ты понял все. ID на странице-это свойство "Name" компонента. И в коде у тебя вроде стоит его изменение...Странно...Хотя-привыкай! Странности только начинаются! |
Автор: ssaich 02.03.15, 06:38 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> <input name="CheckBox2" value="2" style=" font-family: Tahoma; font-size: 11px; cursor: default;" checked="checked" tabindex="0" id="CheckBox1" type="checkbox"> вот код, имя меняется а ид нет |
Автор: ssaich 02.03.15, 08:47 |
Добавил в код строку как эксперимент поле Image повесил на другой обработчки события <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> function DBRepeater1Detail($sender, $params) { $this->CheckBox->name="CheckBox".$this->MySQLTable1->A_ID; $this->Image1->Name="Image".$this->MySQLTable1->A_ID; if ($this->MySQLTable1->A_PRICE_CHECK==1) { $this->CheckBox->Caption="Оплачено"; $this->CheckBox->Checked=true; } else { $this->CheckBox->Caption=$this->MySQLTable1->A_ID; $this->CheckBox->Checked=false; } } смотрю html код <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> <img id="Image1" src="" border="0" height="89" width="105"> <img id="Image2" src="" border="0" height="89" width="105"> <img id="Image3" src="" border="0" height="89" width="105"> с имейдж работает <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> <table id="CheckBox1_table" style=" font-family: Tahoma; font-size: 11px; cursor: default;height:20px;width:120px;" cellpadding="0" cellspacing="0"> <tbody><tr><td width="20"><input name="CheckBox1" value="Оплачено" style=" font-family: Tahoma; font-size: 11px; cursor: default;" checked="checked" tabindex="0" id="CheckBox1" type="checkbox"></td><td><label for="CheckBox1">Оплачено</label></td></tr> </tbody></table> а чекбокс отказывается .. хелп ? ) |
Автор: Alex2011 02.03.15, 09:12 |
Значит исходники нужно смотреть и править. |
Автор: ssaich 02.03.15, 09:22 |
Эх, сам я вряд ли разберусь ( |
Автор: Alex2011 02.03.15, 09:36 |
Думаю, что это не так просто окажется(правка исходников) -могут вылезти косяки с позиционированием элементов, так как правил CSS может не оказаться в сформированной странице для всех чекбоксов.(Уверен, что так и будет, если не использовать стили для них) |
Автор: ssaich 02.03.15, 09:44 |
Причем чек бокс стоит внутри таблицы, а ID <table id="TCheckBox2_table" таблице передается |
Автор: Alex2011 02.03.15, 09:47 |
Для чего надо присваивать уникальное имя? Чтобы потом передать на сервер? Может оказаться, что все можно по-другому решить. |
Автор: ssaich 02.03.15, 09:52 |
Цитата Alex2011 @ Для чего надо присваивать уникальное имя? Чтобы потом передать на сервер? Может оказаться, что все можно по-другому решить. Хочу реализовать по клику чекс бокса Update в базу, без передачи ID по ссылке |
Автор: Alex2011 02.03.15, 10:10 |
Можно разместить Label и присваивать Caption тот уникальный код, какой тебе нужен. Если цвет шрифта установить =цвету фона-она не будет видна, станет прозрачной (или установить |
Автор: ssaich 02.03.15, 10:27 |
все чекбоксы с одинаковым ID <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> var t = (event.target || event.srcElement).id; alert(t); return(false); три чекбокса - каптион разное а id одинаков |
Автор: Alex2011 02.03.15, 11:26 |
Тут надо смотреть DOM и вычислять. Попробуй сам Мне лень. Да и уменя HTML5 Builder. Там я использую jQuery, а в RadPHP надо чистый JS. |
Автор: Alex2011 02.03.15, 13:00 |
Посмотрел на своем компоненте.Проблема сложнее, чем казалась на первый взгляд и похоже вычислить нельзя, только по координатам клика, а это тоже не просто. |
Автор: ssaich 02.03.15, 14:25 |
Если уж очень сильно захотеть то 1) Взять две картинки (отмеченный чек бокс и не отмеченный чек бокс) 2) Вставить Имейдж 3) Ну а дальше я думаю все поняли ?? ))) |
Автор: Alex2011 02.03.15, 14:29 |
Пробуй! Я на своем компоненте поэкспериментирую, может быть придумаю что-нибудь другое.(Что-то типа уникального кода строки или точнее в моем случае элемента(ячейки), так как он у меня многоколоночный.). |
Автор: Alex2011 02.03.15, 15:34 |
Возвращаясь к вычислению Caption элемента Label. Смысл такой, что нужно получить родительский элемент-контейнер всех компонентов текущей записи td (если режим горизонтального отображения) или tr (в режиме вертикального отображения) в котором был клик (вроде так, но смотрел по своему компоненту), потом искать в нем Label и брать Caption, если использовать предложенный мною способ. |