Поле+кнопка+enter

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

pikar

Events --> Key --> onkeydown --> Client --> Execute Script

if (thisEvent.keyCode==13) {
thisEvent.preventDefault();
var btnm = '#{id:searchButton}';
var btnobj = document.getElementById(btnm);
if (btnobj != null) {
btnobj.click();
}
}
:) - что за... (не работает)

Error while executing JavaScript action expression
Script interpreter error, line=1, col=22: [ReferenceError] 'thisEvent' not found
Возможно, я ошибаюсь, но не thisEvent, а просто event. Или this.event. И еще, у себя обычно клиентский код вешаю не сюда, а
свойства - все свойства - события - onkeydown. Уж не помню, почему, от вешания клиентского кода на вкладку события отказался.
И мне не очень понятно все-таки, что должно в итоге получиться. Есть поле, есть кнопка, в поле вводится текст, нажимается кнопка (или энтер в поле) и... что дальше? Какая страница должна открыться, эта же или другая? Поле привязано к sessionScope или requestScope? Просто хотелось бы подробнее задачку понять, чтоб прояснилось, например, зачем это: sessionScope.nameToSearch = requestScope.nameToSearch. Простите за непонятливость, если что ;) Если нужно просто сабмитить, то зачем отлавливать энтер - по нему и так форма отправится на сервер. Если привязать sessionScope.nameToSearch к полю, то зачем код - после отправки на странице в событии типа beforePageLoad (или в поле вычисляемом, например) обрабатываем отправленное значение. Или я все-таки что-то не так понимаю?
Короче, вот у меня такая страничка получилась:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:inputText id="nameToSearch" value="#{viewScope.nameToSearch}"></xp:inputText>
<xp:button value="Поиск" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete" immediate="false" save="true"></xp:eventHandler>
</xp:button>
<xp:text escape="true" id="computedField1">
<xp:this.value><![CDATA[#{java script:if (viewScope.nameToSearch==null||viewScope.nameToSearch=='') {
return 'Нет данных для поиска'
}
else {
return 'Можно поискать по значению '+viewScope.nameToSearch
}}]]></xp:this.value>
</xp:text>
</xp:view>
 
M

Mitya

есть в нем строки JS, кот. выше?

Пишу в onkeydown на стороне клиента:

if(thisEvent.keyCode == 13) {
thisEvent.preventDefault();
var btnobj = document.getElementById("#{id:Button1}");
if (btnobj != null) {
btnobj.click ();
}
}

FireBug выдает:
 

Вложения

  • 1.JPG
    1.JPG
    71,8 КБ · Просмотры: 224

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
в вашей задаче этот код ваще лишний, как я понимаю, нужно перехватить событие, а дефолтный хэндлер выключить
в примере использовали нажатие на кнопку
возможно кнопки с таким ИД просто нет и компиллер просто выкидывает пустоту
 
M

Mitya

в вашей задаче этот код ваще лишний, как я понимаю, нужно перехватить событие, а дефолтный хэндлер выключить
в примере использовали нажатие на кнопку
возможно кнопки с таким ИД просто нет и компиллер просто выкидывает пустоту
Код:
<xp:inputText id="inputText1" style="width:40%;font-size:12pt;font-weight:bold;color:rgb(0,64,128);padding-top:3.0px;padding-right:3.0px;margin-top:10.0px" value="#{requestScope.nameToSearch}" styleClass="profiles">
<xp:typeAhead mode="partial" minChars="1" ignoreCase="true" id="typeAhead1">
<xp:this.valueList><![CDATA[#{java script:@DbColumn(@DbName(), "profiles", 0)}]]></xp:this.valueList>
</xp:typeAhead>
<xp:eventHandler event="onkeydown" submit="false">
<xp:this.script>
<xp:executeClientScript>
<xp:this.script><![CDATA[if(thisEvent.keyCode == 13) {
XSP.alert ("Функция временно отключена, поиск ведется через кнопку «Поиск»")
}]]></xp:this.script>
</xp:executeClientScript>
</xp:this.script>
</xp:eventHandler>
</xp:inputText>
<xp:button value="Поиск..." id="button1" styleClass="profilesButtonCommand" style="font-size:14pt;padding-left:20.0px;padding-right:20.0px">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete" id="eventHandler2">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript
script="#{java script:sessionScope.nameToSearch = requestScope.nameToSearch}">
</xp:executeScript>
<xp:openPage
name="/Xpagehome.xsp">
</xp:openPage>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>
вот что у меня на данный момент... но по нажатию "Enter" в поле nputText1 я не понимаю как запустить button1
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
тока шо проверил - всё работает:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

<xp:label value="Label" id="label1"></xp:label>
<xp:inputText id="inputText1">
<xp:eventHandler event="onkeypress" submit="false">
<xp:this.script><![CDATA[if(thisEvent.keyCode == 13) {
thisEvent.preventDefault();
var btnobj = document.getElementById("#{id:button1}");
if (btnobj != null) {
btnobj.click ();
}
}
]]></xp:this.script>
</xp:eventHandler></xp:inputText>
<xp:button value="Label" id="button1"><xp:eventHandler event="onclick" submit="false">
<xp:this.script>
<xp:executeClientScript>
<xp:this.script><![CDATA[alert("ok");]]></xp:this.script>
</xp:executeClientScript>
</xp:this.script></xp:eventHandler></xp:button>
</xp:view>

Добавлено: и да - не забываем про кэйссенситив!
 
Мы в соцсетях:

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