Клавиша ввода не работает в Firefox - onkeypress (я знаю, что есть ответы, но)

Я видел все сообщения об этой проблеме, но я все еще не могу заставить клавишу ввода работать в Firefox. Вот все мои итерации кода, и я, очевидно, изменил его сто раз, чтобы попытаться заставить его работать. Я могу заставить его работать в IE, а не в Firefox. Альтернативный вопрос: я новичок в xPages. Где я могу определить функцию в xPage или мне нужно создать библиотеку сценариев и добавить ее в ресурсы? Спасибо всем.

Майк

var metaChar = false;
var key = event.keyCode || event.which;
if (key == 13) {
    metaChar = true;
    event.returnValue = true;
    alert("true13");
}
if (key != 13) {
    if (metaChar) {
        alert("false");
        metaChar = false;
    } else {
        alert("true");
        event.returnValue = false;
    }
}


 
 
/*
var vevent = event.keyCode || event.key // IE does not pass event to the function
if(vevent == window.event){
    code = event.keyCode;
}else{
    code = event.key;
} 

if(code == 13){ 
    event.returnValue = true; 
    alert("True"); 
} else { 
    event.returnValue = false; 
    return false;
    alert("False"); 
}
*/

var e = event.keyCode || event.which;
charCode = e.keyCode || e.which;

if(charCode == 13){ 
    return true; 
    alert("True"); 
} else { 
    return false; 
    alert("False"); 
}

person Mike Gonzalez    schedule 10.12.2015    source источник
comment
eturn false? если это не опечатка, синтаксическая ошибка убьет весь блок кода.   -  person Marc B    schedule 10.12.2015
comment
нет, правильно написано. если также. Когда я скопировал код, паста вставила дополнительные строки, я отредактировал его и случайно удалил символы.   -  person Mike Gonzalez    schedule 10.12.2015


Ответы (1)


Я подозреваю, что ваша проблема заключается в попытке использовать event в вашем javascript. В XPages вам нужно использовать другую ссылку thisEvent, некоторую информацию можно найти на эту ссылку в разделе "Получение информации о событии". Это особенность того, как XPages добавляет события при загрузке страницы.

Для вашей ситуации я создал простой пример XPage, который показывает вам, как захватить клавишу ввода в обработчике событий или использовать встроенную функцию, если вы хотите пойти по этому пути. Это работает для меня в Chrome, Firefox и Internet Explorer 11.

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:panel id="panel1">
        <script type="text/javascript">
            var enterKey = function(eventParam) {
                var key = eventParam.keyCode || eventParam.which;
                console.log("key = " + key);
                if (key == 13) {
                    alert("script function - enter");
                    return true;
                }else{
                    alert("script function - other character");
                    return false;
                }
            }
        </script>
        <xp:inputText id="button1">
            <xp:eventHandler event="onkeypress" submit="false">
                <xp:this.script><![CDATA[
                    var key = thisEvent.keyCode || thisEvent.which;
                    console.log("key = " + key);
                    if (key == 13) {
                        alert("button event script - enter");
                        return true;
                    }else {
                        alert("button event script - other character");
                        return false;
                    }
                    ]]>
                </xp:this.script>
            </xp:eventHandler>
        </xp:inputText>
        <xp:br />
        <xp:br />
        <xp:inputText id="button2">
            <xp:eventHandler event="onkeypress" submit="false">
                <xp:this.script><![CDATA[
                    enterKey(thisEvent);
                    ]]>
                </xp:this.script>
            </xp:eventHandler>
        </xp:inputText>
    </xp:panel>
</xp:view>
person Brian Gleeson - IBM    schedule 10.12.2015
comment
Брайан спасибо за эту информацию и ваши усилия. Я попытался изменить событие, и я получаю ложное предупреждение, когда не нажимаю Enter, используя thisEvent.returnValue = false; но Enter не проходит этот код на стороне клиента, когда я использую true вместо false. - person Mike Gonzalez; 10.12.2015
comment
В этом случае вам придется переключить свойство submit в обработчиках событий на true и вернуть true в CSJS, если вы хотите, чтобы SSJS выполнялся впоследствии, в противном случае вернуть false в CSJS. - person Brian Gleeson - IBM; 11.12.2015
comment
Я уже делаю полное обновление и возвращаю true и false, как в приведенном выше коде. Он работает в IE, но не в Firefox. - person Mike Gonzalez; 11.12.2015
comment
Я обновил код примера с помощью механизма, который я описываю. Я не использую свойство returnValue. В обработчике событий я просто вызываю return true или return false в зависимости от обстоятельств. - person Brian Gleeson - IBM; 11.12.2015
comment
Если я не ошибаюсь, это было бы хорошо вернуться из функции, но я работаю непосредственно в коде на стороне клиента onkeypress. Я пробовал оба, и они не работают. Я могу дать вам код в автономном режиме, но эти поля не позволяют мне помещать код в дополнительные комментарии. - person Mike Gonzalez; 11.12.2015
comment
Я попробовал это, и теперь это работает. Я делал то же самое несколько раз, и это не так. Не знаю почему, но копать не буду. Пока это работает. Спасибо за помощь - person Mike Gonzalez; 11.12.2015