Положение переключателя элементов Qcodo

У меня есть флажок, который при нажатии показывает раскрывающийся список. Я просто хочу, чтобы они поменялись местами.

Проблема в том, что когда я меняю позицию с помощью php, он выдает ошибку ajax. Поскольку каждый из них вызывается в динамическом идентификаторе div, я не могу использовать CSS для его изменения.

Я рассмотрел просто создание верхнего поля с помощью nth-child в css, но мне тоже не повезло.

Прямо сейчас флажок переключает видимость раскрывающегося списка, но флажок находится ниже, где появляется раскрывающийся список. Я думаю, что другой подход заключается в том, чтобы как-то использовать javascript... Я что-то упустил? Почему нельзя обменять заказ

    $ret['reclength'] = new QListBox($objParent);
    $ret['length']->Name = _sp('Item Name');

    $ret['length']->AddItem("weekly", "7");
    $ret['length']->AddItem("bi-weekly","14" );
    $ret['length']->AddItem("Monthly","30" );
    $ret['length']->Display=false;      

    $ret['checkbox'] = new QCheckbox($objParent);
    $ret['checkbox']->Name = _sp('checkbox name');
    $ret['checkbox']->AddAction(new QClickEvent(), new QToggleDisplayAction($ret['length']));

    return $ret;

2 ответа

Решение

Порядок рендеринга будет зависеть от вашего родительского элемента управления, в вашем случае $objParent. Если $ objParent является QForm, вам просто нужно переключить их порядок в шаблоне QForms. Однако с поведением, которое вы наблюдаете, я предполагаю, что $ objParent является QPanel. Если это так, вам нужно добавить шаблон в QPanel и отобразить элементы управления в этом шаблоне в нужном вам порядке. Вы можете попробовать AutoRenderChildren = true, но при этом элементы управления будут отображаться в том порядке, в котором они делегированы как дочерние элементы QPanel.

Чтобы использовать CSS для позиционирования, вы можете добавить идентификатор в элемент управления. Таким образом, вы можете ссылаться на него в своем CSS и избежать двусмысленности в вашем селекторе. Вам просто нужно добавить второй параметр в конструктор, как

$ret['reclength'] = new QListBox($objParent, "myControlId");

Просто убедитесь, что myControlId уникален для этой страницы. тогда вы можете получить доступ к CSS с помощью #myControlId.

Другой вариант, который может сработать, - установить для родительского элемента значение $this, когда вы создаете экземпляр элемента управления QListBox, а затем после создания экземпляра QCheckbox установите для родительского элемента QListBox значение $objParent. Не проверял это, но это должно работать. Вы не можете увидеть пример QForms в действии на сайте примеров QCubed. Код будет выглядеть примерно так. Обратите внимание, что это не проверено, но должно работать.

$ret['reclength'] = new QListBox($this);
$ret['length']->Name = _sp('Item Name');

$ret['length']->AddItem("weekly", "7");
$ret['length']->AddItem("bi-weekly","14" );
$ret['length']->AddItem("Monthly","30" );
$ret['length']->Display=false;      

$ret['checkbox'] = new QCheckbox($objParent);
$ret['checkbox']->Name = _sp('checkbox name');
$ret['checkbox']->AddAction(new QClickEvent(), new QToggleDisplayAction($ret['length']));

$ret['reclength']->SetParentControl($objParent);

return $ret; 

Я не уверен, как выглядит ваш файл шаблона, возможно, проблема не в порядке, так как при правильном расположении там изменится порядок его отображения. Но даже без этого вы можете что-то сделать, заказав их. Просто используйте z-index и добавьте класс Css в QListbox:

$ret['length']->CssClass = "mydropdown";

И это в CSS:

.mydropdown {
    z-index: 9999;
}

Но есть также ошибка IE6/7 с z-index

Другие вопросы по тегам