Форум: "Потрепаться";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
ВнизIntraWeb + JavaScript Найти похожие ветки
← →
Digitman © (2005-07-13 16:30) [0]Пусть IW сгенерировал следующий html-текст :
<body>
..
<form ... name="SubmitForm" .. >
.. чего-то там ...(куча контролов)
<div id="RGRREPORTMODE" name="RGRREPORTMODE" .. OnClick="CheckReportMode(this)">
<input type="RADIO" CHECKED name="RGRREPORTMODE" value="0">Детально<BR>
<input type="RADIO" name="RGRREPORTMODE" value="1">Сводно<BR>
</div>
..
</form>
..
</body>
как грамотно в теле CheckReportMode() получить объект типа RADIOBUTTON имеющий св-во Checked=True ?
← →
Плохиш © (2005-07-13 18:02) [1]Только проверяя свойство checked у каждого элемента
(document.SubmitForm.RGRREPORTMODE[...].checked == true)
← →
DiamondShark © (2005-07-13 18:08) [2]
function CheckReportMode(oSender)
{
var oButton = null;
var oControls = oSender.all("RGRREPORTMODE");
for (var i=0;i<oControls.length && !oControls.item(i).checked;i++);
if (i<oControls.length) oButton = oControls.item(i);
// здесь oButton содержит ссылку на кнопку, или null если никто не чекед
}
ЗЫ
А нафига чего-то чекать при любом клике внутри ДИВа, даже мимо кнопок?
← →
Digitman © (2005-07-14 09:32) [3]
> Плохиш © (13.07.05 18:02) [1]
на первый взгляд вроде бы логично.
этот вариант и я рассматривал, но мне он показался не ахти как "грамотным" ..
хотелось бы использовать для оной цели this, переданный параметром
понимаю, что this в дан.случае - это <div>, но пока я не придумал, как лучше "разрулить" ситуацию (см. ниже)
> DiamondShark © (13.07.05 18:08) [2]
Видишь ли, к сожалению IW 5.0.43 для компонента TIWRadioGroup не предоставляет механизма для автогенерации нужного событийного скрипта, подобно тому как это выглядит для, например, обычных кнопок (TIWButton) в виде св-ва ScriptEvents
При рендеринге HTML-кода компонента TIWRadioGroup ИнтраВэб позволяет внедриться в этот процесс лишь в единственном для этого компонента событии OnHTMLTag, которое относится не к тэгам радиокнопок, а к <DIV>-тэгу
Обработчик этого события в наст.момент у меня выглядит так :procedure TformMain.rgrReportModeHTMLTag(ASender: TObject; ATag: TIWHTMLTag);
begin
ATag.AddStringParam("OnClick", "CheckReportMode(this)");
end;
При этом в результате рендеринга IWRadioButtton-контрола имеем не иначе как :
<div id="RGRREPORTMODE" name="RGRREPORTMODE" .. OnClick="CheckReportMode(this)">
<input type="RADIO" CHECKED name="RGRREPORTMODE" value="0">Детально<BR>
<input type="RADIO" name="RGRREPORTMODE" value="1">Сводно<BR>
</div>
Т.е. я и рад бы сделать так
<div id="RGRREPORTMODE" name="RGRREPORTMODE" .. >
<input type="RADIO" name="RGRREPORTMODE" .. OnClick="CheckReportMode(this)"..> ..
<input type="RADIO" name="RGRREPORTMODE" .. OnClick="CheckReportMode(this)"..> ..
</div>
да вот IW мне не позволяет в дан.случае внедриться в рендеринг именно <INPUT>-тэга..
По кр.мере на сей момент я не представляю, как это сделать ..
Изначальная идея подразумевала "универсальность" скриптовой процедуры CheckReportMode(), не привязанной к конкретной именованой группе радиобатонов на форме (коих м.б. более чем одна), позволяющей обратиться к группе по переданному объектному параметру, соответствующего группе, а не по символьному идентификатору
Что в такой ситуации ты мог бы предложить передавать параметром вместо this ?
← →
DiamondShark © (2005-07-14 11:44) [4]
> Digitman © (14.07.05 09:32) [3]
Ага, понял.
> Что в такой ситуации ты мог бы предложить передавать параметром
> вместо this ?
Ничего не надо. Если IW всегда генерит name контейнера равный name контролов, то внутри функции:
function CheckReportMode(oSender)
{
var oButton = null;
var oControls = oSender.all(oSender.name);
for (var i=0;i<oControls.length && !oControls.item(i).checked;i++);
if (i<oControls.length) oButton = oControls.item(i);
// здесь oButton содержит ссылку на кнопку, или null если никто не чекед
}
← →
Digitman © (2005-07-14 12:29) [5]
> DiamondShark © (14.07.05 11:44) [4]
> Если IW всегда генерит name контейнера равный name контролов
да, так и есть.
судя по всему, для IW это правило, по кр.мере для группы радиокнопок
в принципе я тоже дошел до решения в виде oControls = oSender.all(oSender.name);
, но все равно - спасибо за подсказку !
Тут еще один смежный вопрос возник - от состояния того или иного радиобатона должна зависеть, например, видимость неких контролов на форме (о фреймах пока речи не идет), и есть откровенное желание управлять видимостью этих контролов прямо на кл.стороне, в событийном j-скрипте, без обращения к серверу для генерации обновленного документа...
Но насколько я себе представляю, без полной или частичной перезагрузки документа изменить статус видимости контрола вряд ли возможно - по сути контрол нужно пересоздать с новым атрибутом видимости ...
Как тут можно поступить ?
← →
Плохиш © (2005-07-14 13:19) [6]
> Digitman © (14.07.05 12:29) [5]
> Но насколько я себе представляю, без полной или частичной
> перезагрузки документа изменить статус видимости контрола
> вряд ли возможно - по сути контрол нужно пересоздать с новым
> атрибутом видимости ...
> Как тут можно поступить ?
Меняй свойства объектов, например
document.getElementById("vorname").style.visibility = "hidden";
или
document.getElementById("vorname").style.visibility = "visible";
← →
Digitman © (2005-07-14 13:38) [7]
> Плохиш © (14.07.05 13:19) [6]
Упс !
Слона-то я и не приметил)
Вот что значит "маловато хатмельной практики" !
Спасибо, сэр !
← →
Плохиш © (2005-07-14 14:03) [8]Всегда, пожалуйста :-)
PS. Хотел порекомендовать http://www.selfhtml.ru , дык там очень малая часть переведена :-(
← →
DiamondShark © (2005-07-14 15:11) [9]А ещё в стилях можно использовать выражения.
Поддерживаются IE 5.0+
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.034 c