Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.07;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
3-1120452796
leonidus
2005-07-04 08:53
2005.08.07
Как связать таблицы с использованием движка ADO


14-1120578423
NewWonder
2005-07-05 19:47
2005.08.07
Сделал курсовик и ...


14-1121313091
Soft
2005-07-14 07:51
2005.08.07
Во Второй Мировой Войне виноват Советский Союз.


1-1121770998
TButton
2005-07-19 15:03
2005.08.07
запись в файл


14-1121268154
Kerk
2005-07-13 19:22
2005.08.07
DIV element