Частичное обновление делает полное обновление при использовании onkeyup - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть поле ввода и кнопка, содержащая тот же код и такое же частичное обновление. Кнопка работает нормально и выполняет частичное обновление, но при вводе «ввода» в поле ввода происходит полное обновление.

что я делаю не так

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

    <xp:text escape="true" id="computedField1"
        value="#{javascript:@Now()}">
        <xp:this.converter>
            <xp:convertDateTime type="both"></xp:convertDateTime>
        </xp:this.converter>
    </xp:text>
    <xp:panel id="ref">

    <xp:inputText id="inputText8" style="width:142.0px">
        <xp:this.attrs>
            <xp:attr name="placeholder" value="Sök produkter"></xp:attr>
        </xp:this.attrs>
        <xp:eventHandler event="onkeydown" submit="true"
            refreshMode="partial" refreshId="ref" execMode="partial"
            execId="ref">
            <xp:this.action><![CDATA[#{javascript:try{
    viewScope.sq = getComponent("inputText8").getValue();
}catch(e){
    doLog(e,this)
}}]]></xp:this.action>
            <xp:this.script><![CDATA[var k = thisEvent.keyCode;
if (k == 13) {
  return true;
}else{
  return false;
}]]></xp:this.script>
        </xp:eventHandler>
    </xp:inputText>
    <xp:button value="Sök" id="button1">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="partial" refreshId="ref" execMode="partial" execId="ref">
            <xp:this.action><![CDATA[#{javascript:try{
    viewScope.sq = getComponent("inputText8").getValue();
}catch(e){
    doLog(e,this)
}}]]></xp:this.action>
        </xp:eventHandler></xp:button>
    </xp:panel>
    <xp:br></xp:br>

</xp:view>

Кстати: onkeypress, onkeyup и onkeydown работают одинаково

ОБНОВЛЕНИЕ РЕШЕНИЯ

if(thisEvent.keyCode == 13) {
    thisEvent.preventDefault();
    return true;
}else{
    return false;
}

1 Ответ

0 голосов
/ 07 сентября 2018

Когда я пытаюсь воспроизвести ваш сценарий, за ajax-запросом сразу же следует отправка формы, что приводит к полному обновлению страницы. Это должно помочь:

<xp:this.script><![CDATA[
    event.preventDefault();
    var k = thisEvent.keyCode;
    if (k == 13) {
        return true;
    }else{
        return false;
    }]]>
</xp:this.script>
...