限制阿贾克斯机制而进入关键的JSF组件

问题描述:

这里按下是拍摄选择器和禁用回车键限制阿贾克斯机制而进入关键的JSF组件

$(".disableEnterKey").keydown(function(event) { 

    var charCode = event.charCode || event.keyCode || event.which; 
    if (charCode === 13) { 

     event.preventDefault(); 

     return false; 
    } 
}); 

禁止输入键primefaces-timepicker

<pe:timePicker id="startTime" 
    value="#{xxx.xxx.var}" 
    mode="popup" startHours="0" endHours="23" 
    showPeriod="true" widgetVar="startTimeWidget" 
    styleClass="form-control keyDownFalse disableEnterKey" > 
     <p:ajax event="timeSelect" partialSubmit="false" 
     listener="#{xxx.var}" 
     update="endTime, duration" 
     oncomplete="keyDownFalse()"/> 
    </pe:timePicker> 

但问题的inputfield这里是更新属性下的ajax标签。即,一旦触发了开始时间timepicker事件,我正在更新结束时间选择器。但它应该只在小时和分钟从启动时间选择器而不是按输入键时触发。

Image before pressing enter on Start-time

末时被按下一次在启动时进入关键更新。

Image before pressing enter on Start-time

所以,请建议我,什么是限制AJAX机制,同时按下输入准确的方式。提前致谢。

+0

你不会返回任何东西在oncomplete ...你应该...是https://*.com/questions/34354839/return-false-not-working-and-action-gets-triggered-on点击h命令按钮重复? – Kukeltje

+0

@Kukeltje,我认为'return'不会影响任何改变。即oncomplete =“return keyDownFalse()”。 –

+0

我也试过了。但对我的用例没有影响。 –

此行为的来源实际上是由设计, 上的回车键,值的更新是由原来的jQuery插件fgtimepicker,正好是here发射。

要解决这个问题,最简单的方法是扩展插件并更改此特定行为。该扩展方法的一个例子:

$.extend($.fgtimepicker, { 
    _doKeyDown: function (event) { 
     //copy original source here with different handling for 13/enter case   
    } 
}); 

的进入办案完整的例子可能是这样的:

<script> 
//<![CDATA[ 
    $.extend($.fgtimepicker, { 
     _doKeyDown: function (event) { 
      var inst = $.fgtimepicker._getInst(event.target); 
      var handled = true; 
      inst._keyEvent = true; 
      if ($.fgtimepicker._timepickerShowing) { 
       switch (event.keyCode) { 
        case 9: 
         $.fgtimepicker._hideTimepicker(); 
         handled = false; 
         break; // hide on tab out 
        case 13: 
         //CHANGE Enter KEY BEHAVIOUR 
         //NO NEED TO FIRE THE UPDATE ---> $.fgtimepicker._updateSelectedValue(inst); 
         $.fgtimepicker._hideTimepicker(); 
         handled = false; 
         break; // hide on tab out 
        case 27: 
         $.fgtimepicker._hideTimepicker(); 
         break; // hide on escape 
         default: 
          handled = false; 
       } 
      } else if (event.keyCode == 36 && event.ctrlKey) { // display the time picker on ctrl+home 
       $.fgtimepicker._showTimepicker(this); 
      } else { 
       handled = false; 
      } 
      if (handled) { 
       event.preventDefault(); 
       event.stopPropagation(); 
      } 
    } 
}); 
//]]> 
</script> 

这将防止因回车键的任何更新事件。

请注意,这段脚本必须立即启动,比如document.ready左右,这就是我将扩展名包含在<script>标记中的原因,以便为后来者更清晰。