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

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

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

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

Фокус В Поле

  • Автор темы Mitya
  • Дата начала
M

Mitya

Добрый день.

Хочу поставить фокус в поле inputText1, делаю так

В beforePageLoad пишу:

inputFieldName='#{id:inputText1}';
var inputObj = document.getElementById(inputFieldName);
inputObj.focus();

Пишет Error
while executing JavaScript action expression
Script interpreter error, line=2, col=25: [ReferenceError] 'document' not found
 
Z

Zeka

Это писать надо не beforePageLoad, а в afterPageLoad (или как оно там) и не Server Side Java Script, а Client Side Java Script.
 
M

Mitya

Это писать надо не beforePageLoad, а в afterPageLoad (или как оно там) и не Server Side Java Script, а Client Side Java Script.
1) В afterPageLoad нет Client Side Java Script. Скрипт все равно не работает.
2) Предложили в OnClientLoad на стороне клиента написать: XSP.getElementById("#{id:inputText1}").focus();

Работает, но не везде. Explorer8 не отрабатывает.

Вопрос не решен =(
 
Z

Zeka

Ну да, запарился, OnClientLoad и надо было.

XSP.getElementById("#{id:inputText1}").focus(); - у меня в IE8 прекрасно отрабатывает
 
P

pikar

добавлю из своего небольшого опыта. У меня тоже onClientLoad не всегда корректно работает почему-то. Делаю так: клиентские скрипты вставляю в XPage в конец в компонент <xp:scriptBlock>, и использую dojo.addOnload и dojo.byId.
 
M

Mitya

добавлю из своего небольшого опыта. У меня тоже onClientLoad не всегда корректно работает почему-то. Делаю так: клиентские скрипты вставляю в XPage в конец в компонент <xp:scriptBlock>, и использую dojo.addOnload и dojo.byId.
;) мой небольшой опыт еще не на столько большой как ваш, и как использовать dojo.addOnload и dojo.byId? можно кусок кода, где почитать

Заметил, что фокус не хочет ставиться, если включаю "Опережающий ввод" в поле
 
P

pikar

ну как-то так:
dojo.addOnload(function(){
dojo.byId("#{id:inputText1}").focus();
})

Это все в компоненте <xp:scriptBlock>.
А вот с опережающим вводом надо будет тоже поэкспериментировать. :)
 
M

Mitya

Если я правильно понял, а потом и нашел, то делаю так:
<xp:scriptBlock id="scriptBlock1" type="text/javascript">
<xp:this.value><![CDATA[
dojo.addOnload(function(){
dojo.byId("#{id:inputText1}").focus();
})
]]></xp:this.value>
</xp:scriptBlock> - НЕ РАБОТАЕТ

Из прочитанного... Dojo (доджо) — свободная модульная библиотека JavaScript.
это мне ее подключить к страничке надо? Как?
 
P

pikar

не понятно, что не работает. просто фокус не ставится? ошибки в консоли есть?
lotus поставляется с dojo, но, кажется, ее нужно подключать все равно, в теме или на странице в ресурсах. У меня, вроде, в теме - посмотрю завтра, нет под рукой. Dojo кроссбраузерная, поэтому проблем с IE быть не должно.
 
M

Mitya

не понятно, что не работает. просто фокус не ставится? ошибки в консоли есть?
lotus поставляется с dojo, но, кажется, ее нужно подключать все равно, в теме или на странице в ресурсах. У меня, вроде, в теме - посмотрю завтра, нет под рукой. Dojo кроссбраузерная, поэтому проблем с IE быть не должно.
1) не ставится фокус в поле.
2) ошибок при сохранении страницы -нет. Но, при загрузке в EI пишет "Выполнено, но с ошибками на странице" - "Объект не поддерживает это свойство или метод"
3) Не могу найти в lotuse где лежит dojo библиотека, как на (рис)

Спасибо за помощь.
 

Вложения

  • 1.JPG
    1.JPG
    36,3 КБ · Просмотры: 512
P

pikar

У меня в лотусе (8.5.3) dojo подключен автоматически. По описанию, библиотека должна быть доступна по url хост/xsp/.ibmxspres/dojoroot/dojo/dojo.js (или без xsp в начале). Поэтому ее можно подключить в ресурсы на странице или теме. Но повторюсь, у меня все и так подключено. Убедиться в этом можно, посмотрев подключенные javascript библиотеки в заголовке передаваемой html-разметки. Должно быть что-то вроде:
<script djconfig="locale: 'ru', parseOnLoad: true" src="/xsp/.ibmxspres/dojoroot-1.6.1/dojo/dojo.js" type="text/javascript"></script>

У меня фокус нормально работает. Вот страничка XPage.

<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:inputText id="inputText1"></xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:inputText id="inputText2">
<xp:typeAhead mode="full" minChars="1">
<xp:this.valueList><![CDATA[привет
пока
тест]]></xp:this.valueList>
</xp:typeAhead></xp:inputText>
<xp:br></xp:br><xp:br></xp:br>
<xp:inputText id="inputText3"></xp:inputText>
<xp:br></xp:br>
<xp:br></xp:br>
<xp:button value="Label" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete" immediate="false" save="true"></xp:eventHandler>
</xp:button>
<xp:scriptBlock>
<xp:this.value><![CDATA[dojo.addOnLoad(function(){
dojo.byId('#{id:inputText2}').focus();
dojo.byId('#{id:inputText2}').select();
});]]></xp:this.value>
</xp:scriptBlock>
</xp:view>

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

Кстати, на рисунке, как я понял, структура базы. Но dojo лежит на сервере. Или локально где-то в папке с установленным лотусом.
 
Мы в соцсетях:

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