2015-12-10 3 views
0

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

Майк

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"); 
} 
+1

'eturn false'? если это не опечатка, синтаксическая ошибка убьет весь блок кода. –

+0

нет, это правильно написано. если также. Когда я скопировал код, паста добавила лишние строки, и я его отредактировал и случайно удалил символ (ы). –

ответ

2

Я подозреваю, что ваша проблема заключается в попытке использовать event в вашем JavaScript. В XPages вам нужно использовать другую ссылку thisEvent, некоторая информация на this link under "Getting event information". Это причуда в том, как XPages добавляет события на загрузку страницы.

Для вашей ситуации я создал простой пример XPage, в котором показано, как захватить ключ ввода в eventHandler или использовать встроенную функцию, если вы хотите пройти этот маршрут. Это работает для меня в 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> 
+0

Брайан благодарит вас за эту информацию и ваши усилия. Я попытался изменить событие, и я получаю «ложное» предупреждение, когда я не нажимаю Enter, используя «\t thisEvent.returnValue = false;», но Enter не проходит мимо этого кода на стороне клиента, когда я использую true вместо false. –

+0

Просто FYI, у меня есть код на стороне сервера, который выполняется после нажатия Enter .... –

+0

В этом случае вам придется переключить свойство submit на eventHandlers на true и вернуть true в CSJS, если вы хотите, чтобы SSJS выполняться впоследствии, в противном случае возвращать false в CSJS. –