• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Javascript и Xpages

  • Автор темы doka
  • Дата начала
D

doka

Два варианта кода:
1)
<input id="c555" value="1232"></input>
<script type="text/javascript">
function init () {
value1 = document.getElementById("c555").value;
alert(value1+" - Вот");
}


2)
<xp:inputText id="c555" value="1232"></xp:inputText>
<script type="text/javascript">
function init () {
value1 = document.getElementById("c555").value;
alert(value1+" - Вот");
}

В первом варианте alert отрабатывает нормально, а во втором нет. В чем проблема?
 
D

doka

И в клиенте и в браузере у меня ошибку не выдает. Доходит до этой сточки и дальше код просто не выполняется
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
doka
Скорее всего ты не тот компонент вызываешь...
Дело в том, что xpage-компоненты именуются в коде по другому.
В дизайнере - одно, в коде страницы - другое.
Попробуй найти название компонента в коде страницы....

попробуй вот так
PHP:
document.getElementById("#{id:c555}").value;
 
T

turumbay

Ставим firefox + firebug, открываем страницу, открываем firebug, смотрим dom на предмет наличия элемента с указанным id.
если не помогает - ставим брекпоинт внутрь функции, открываем консоль javascript, далее дебажим как обычно.
p.s. а где собсна вызов функции init?
 
D

doka

document.getElementById("#{id:c555}").value;
Не помогло. А у тебя что так заработало?

p.s. а где собсна вызов функции init?

Вызов в кнопке. С ним все нормально, если только для функций с элементами xpages не требуется специального вызова)
 
T

turumbay

я ж говорю - посмотрите код страницы в браузере. не будет там элемента с вашим id. xpage затирает его своим спец id.

а firebug поставьте. это необходимый инструмент при разработке любых web приложений, в т.ч. с использованием xpages.
 
D

doka

turumbay
Спасибо, я понял, сижу разбираюсь

Может что-то не так делаю? В коде id="view:_id1:_id2:_id5:c555". Использовал конструкцию из примера:

var comboID = 'view:_id1:c555'; / var comboID = 'view:_id1:_id2:_id5:c555';

value1 = document.getElementById("comboID").value;

Какое обращение к элементу правильное?
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Лови рабочий пример. Только учти, если сервер и дизайнер разных версий - СОХРАНЯТЬ ИЗМЕНЕНИЯ КОДА ТОЛЬКО ИЗ ЗАКЛАДКИ SOURCE
Дело в том, что у дизайнеров 8.5 и 8.5.1 разные теги для описания события клиента!!!!
И код из дизайнера 8.5.1 не будет выполняться на сервере 8.5

Мой пример адаптирован для дизайнера 8.5

Код:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

<xp:inputText id="c555"></xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button id="SwitchLink1_2" rendered="true" value="TEST">
<xp:eventHandler event="onclick">
<xp:this.handlers>
<xp:handler type="text/javascript">
<xp:this.script><![CDATA[
var switch_id = '#{java script:getClientId("c555")}';
var switch_code = document.getElementById( switch_id ).value;

alert( switch_code )

]]></xp:this.script>
</xp:handler>
</xp:this.handlers>
</xp:eventHandler>
</xp:button>		
</xp:view>
 
D

doka

NickProstoNick
Да, у меня 8.5.1 и 8.5. Твой код не пошел.
Изменил var switch_code = document.getElementById( switch_id ).value;
на var switch_code = document.getElementById('view:_id1:c555').value; - заработало
Скопировал код в проект - выдает ошибку
document.getElementById("view:_id1:c555") has no properties - кавычки двойные(может в них проблема?)


Чудеса в решете. Спасибо, постараюсь разобраться.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
NickProstoNick
Да, у меня 8.5.1 и 8.5. Твой код не пошел.
Изменил var switch_code = document.getElementById( switch_id ).value;
на var switch_code = document.getElementById('view:_id1:c555').value; - заработало
Скопировал код в проект - выдает ошибку
document.getElementById("view:_id1:c555") has no properties - кавычки двойные(может в них проблема?)


Чудеса в решете. Спасибо, постараюсь разобраться.
Я же тебе говорю.... открываешь свою тестовую форму... или чего там у тебя...
переходишь в закладку Source....
Копируешь то что я тебе предложил... и заменяешь в своей форме... ВСЕ ЦЕЛИКОМ!!!
И в ЭТОЙ ЖЕ ЗАКЛАДКЕ Source сохраняешь!
Все работает!

А чтоб не заниматься ерундой - поставь дизайнер той же версии что и сервер!
 
D

doka

NickProstoNick
Я не сразу заметил что ты код изменил. В таком варианте работает, но если тоже самое поместить в функцию init() и по нажатию её вызвать пишет ошибку document.getElementById( switch_id ) has no properties
Я оставил определение switch_id за пределом функции, а init определил как function init(value1), и сделал вызов init(switch_id)

Ещё раз спасибо за помощь!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!