У меня есть таблица данных с как поля поиска. Я хочу, чтобы метод на отступающем бобе был вызван, когда клавиша ENTER нажимается, а также DataTable, который будет повторно представлен.
Мой подход до сих пор только работает в IE 6, и 7, не в И следующие. Это - inputText:
<h:inputText
value="#{applicantProductListBean.applicantNameFilterValue}"
id="applicantNameFilterValue" onkeypress="submitByEnter(event)">
</h:inputText>
и это - метод JavaScript, который я вызываю:
function submitByEnter(e){
if(e.keyCode==13){
// alert("Enter was pressed");
e.returnValue=false;
e.cancel=true;
document.getElementById("applicantProductListForm:refreshButton").click();
}
}
Как Вы видите, метод JavaScript нажимает на обновление кнопки, которое существует на странице:
<a4j:commandButton value="Refresh" id="refreshButton"
action="#{applicantProductListBean.refreshData}"
image="/images/icons/refresh48x48.gif"
reRender="table, scroller">
</a4j:commandButton>
refreshData метод ничего не возвращает. Как сказано прежде, это только работает в IE 6 и IE 7.
Кто-либо знает, почему это не работает в FF?
Альтернативой, которую я рассматривал, был HotKey, который может действительно поймать событие, ВХОДЯТ, но это может только вызвать Javascript, таким образом, это не является соответствующим.
Надлежащий путь состоит в том, чтобы сделать это через RichFaces или простой JSF?
Удачи!
ОБНОВЛЕНИЕ:
Немного измененный ответ BalusC, сценарий, который работы:
if (event.preventDefault) {
// Firefox
event.preventDefault();
} else {
// IE
event.returnValue = false;
}
Попробуйте заменить блок JS на:
function submitByEnter(e){
if (e.keyCode == 13) {
e.preventDefault();
document.getElementById("applicantProductListForm:refreshButton").click();
}
}
или лучше,
function submitByEnter(e){
if (e.keyCode == 13) {
document.getElementById("applicantProductListForm:refreshButton").click();
return false;
} else {
return true;
}
}
и входной onkeypress
на
onkeypress="return submitByEnter(event)"
. Если это не сработает, запустите отладчик JS Firebug , чтобы проверить, ведет ли код JS ожидаемое поведение.
У меня сработало следующее:
<h:panelGrid onkeypress="searchByEnterAndReturn(event)">
<b:aCustomComponent value="#{evolutionBackingAction.value}" id="someID"/>
</h:panelGrid>
<a4j:commandButton value="Search Now" action="search" id="searchButton"/>
<script type="text/javascript">
function searchByEnterAndReturn(e){
if(e.keyCode==13){
document.getElementById("generalForm:pageHeader:searchButton").click();
}
}
</script>
Это работает, но чтобы найти идентификатор моей кнопки поиска, мне пришлось искать в исходном коде моей страницы, так как сам идентификатор searchButton не мог быть найден!
Я мог бы сделать это на customComponent, но у меня есть контроль над исходным кодом этого компонента, а метод onkeypress не реализован.