На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА
Прежде чем задать вопрос, зайдите в раздел FAQ, возможно там уже есть ответ на него.
Если вы хотите вставить код в сообщение, то пожалуйста выделяйте его тегом [code=dfp] ... [/сode].
Для этого используйте кнопку [code=dfp] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Delphi for PHP.
Модераторы: ViktorXP, vicis
  
> Проблемы с DBRepeater
    Привет всем!

    Обнаружил такую вот проблему. На DBrepeater лежат компоненты-Image и несколько Label. Image использую для имитации нажатия кнопок для действия(редактировать,удалить и т.д.) через AJAX.
    В событии onDetail компонента такой код
    ExpandedWrap disabled
          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 (4,29 Кбайт, скачиваний: 1058)


    Бился день.Только отправил на форум-нашел решение-присваивать имя в событии onBeforeShow компонента Image и только через $sender
    ExpandedWrap disabled
          function imgTrashBeforeShow($sender, $params)
          {
          $sender->name="imgT".$this->Query1->id;
       
          }


    Дополнение.
    Вылезла еще одна проблема. Картинок-"кнопок" несколько в зависимости от текущего статуса документа. Клик по соответствующей кнопке вызывает отпределенные действия и изменяет статус документа на свой. Хотел показывать\прятать такие картинки-"кнопки" в зависимости от статуса документа(например, статус "в корзине"-тогда кнопка корзины уже не должна показываться),однако при первом же клике по к-л кнопке такие кнопки прячутся сразу на всех записях.(в IDE тоже). Решения пока нету.
    Сообщение отредактировано: Alex2011 -
      Всем привет! Возникла проблемка с DBREPEATER ом. Точнее с Label- амии расположенные на нем, почему то не могу изменить размер шрифта цвет шрифта Label-ов. Использую HTML5Builder может кто сталкивался с этим недостатом? За ранее спасибо.
        на сколько я помню в компонентах не ве свойства задействованы
        импользуй стили
          Попробуй как у меня выше (через $sender).
            делаю так
            ExpandedWrap disabled
                  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 ? через компонент - есть ли свойство ?
              Попробуй добавить else $sender->Checked=false; чтобы получилось так.
              ExpandedWrap disabled
                if ($this->MySQLTable1->A_PRICE_CHECK==1)
                 
                    {
                 
                    $sender->Caption="Оплачено";
                 
                    $sender->Checked=true;
                 
                    }
                else $sender->Checked=false;
                Почему человек так устроен, когда проблема лежит не виду и порой решается штатно, в место этого лезем в дебри разбираем до основания предмет изучения, тратим часы на чтение книг и прочих вещей, а тут приходит "умный человек" и говорит

                "А вы магнитофон с паузы снимите, он и заиграет" ) ))


                Спасибо Alex2011 ))


                Добавлено
                Как все таки сменить ID ? )
                  В предыдущей ветке ответил про компоненты. Да, тут еще в else {} включи код для Caption. Я не писал, думаю, ты понял все.
                  ID на странице-это свойство "Name" компонента. И в коде у тебя вроде стоит его изменение...Странно...Хотя-привыкай! Странности только начинаются! :D
                  Сообщение отредактировано: Alex2011 -
                    ExpandedWrap disabled
                      <input name="CheckBox2" value="2" style=" font-family: Tahoma; font-size: 11px;   cursor: default;" checked="checked" tabindex="0" id="CheckBox1" type="checkbox">


                    вот код, имя меняется а ид нет
                      Добавил в код строку как эксперимент поле Image


                      повесил на другой обработчки события

                      ExpandedWrap disabled
                         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 код

                      ExpandedWrap disabled
                        <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">




                      с имейдж работает
                      ExpandedWrap disabled
                        <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 @
                          Значит исходники нужно смотреть и править.

                          Эх, сам я вряд ли разберусь (
                            Думаю, что это не так просто окажется(правка исходников) -могут вылезти косяки с позиционированием элементов, так как правил CSS может не оказаться в сформированной странице для всех чекбоксов.(Уверен, что так и будет, если не использовать стили для них)
                            Сообщение отредактировано: Alex2011 -
                              Причем чек бокс стоит внутри таблицы, а ID <table id="TCheckBox2_table" таблице передается
                                Для чего надо присваивать уникальное имя? Чтобы потом передать на сервер? Может оказаться, что все можно по-другому решить.
                                  Цитата Alex2011 @
                                  Для чего надо присваивать уникальное имя? Чтобы потом передать на сервер? Может оказаться, что все можно по-другому решить.

                                  Хочу реализовать по клику чекс бокса Update в базу, без передачи ID по ссылке
                                    Можно разместить Label и присваивать Caption тот уникальный код, какой тебе нужен. Если цвет шрифта установить =цвету фона-она не будет видна, станет прозрачной (или установить ширину размеры =0). А далее перехватывать JS-нажатие чекбокса ( CheckBox1JSClick) и вычислять Caption и передавать ajax-ом на сервер. У чекбокса есть свойство Tag, но оно, к сожалению, никак не передается на страницу.
                                    Сообщение отредактировано: Alex2011 -
                                      все чекбоксы с одинаковым ID

                                      ExpandedWrap disabled
                                         var t = (event.target || event.srcElement).id;
                                                    alert(t);
                                                    return(false);


                                      три чекбокса - каптион разное а id одинаков
                                        Тут надо смотреть DOM и вычислять. Попробуй сам :D Мне лень. Да и уменя HTML5 Builder. Там я использую jQuery, а в RadPHP надо чистый JS.
                                          Посмотрел на своем компоненте.Проблема сложнее, чем казалась на первый взгляд и похоже вычислить нельзя, только по координатам клика, а это тоже не просто.
                                            Если уж очень сильно захотеть то

                                            1) Взять две картинки (отмеченный чек бокс и не отмеченный чек бокс)
                                            2) Вставить Имейдж
                                            3) Ну а дальше я думаю все поняли ?? )))
                                              Пробуй! :) Я на своем компоненте поэкспериментирую, может быть придумаю что-нибудь другое.(Что-то типа уникального кода строки или точнее в моем случае элемента(ячейки), так как он у меня многоколоночный.).
                                                Возвращаясь к вычислению Caption элемента Label. Смысл такой, что нужно получить родительский элемент-контейнер всех компонентов текущей записи td (если режим горизонтального отображения) или tr (в режиме вертикального отображения) в котором был клик (вроде так, но смотрел по своему компоненту), потом искать в нем Label и брать Caption, если использовать предложенный мною способ.
                                                Сообщение отредактировано: Alex2011 -
                                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                  0 пользователей:


                                                  Рейтинг@Mail.ru
                                                  [ Script execution time: 0,0474 ]   [ 17 queries used ]   [ Generated: 28.03.24, 18:54 GMT ]