2010-06-09 6 views
0

J'utilise riche: inputNumberSpinner tag.Comment arrêter l'actualisation de la page lorsque vous appuyez sur entrer le bouton du champ rich: inputNumberSpinner?

Le problème est:

Je mis l'accent du curseur à l'intérieur de riche: inputNumberSpinner champ, puis je clique sur le bouton entrer de mon clavier, cette page de temps sera automatiquement mise à jour.

Mais je n'ai pas besoin d'actualiser la page lorsque je clique sur le bouton Entrée de mon clavier.

Le code:

spinnerTagTest.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %> 
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd"> 

<f:view> 
    <html> 
     <head> 
     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">    
    </head> 
<body> 
     <h:form id="SpinnerForm">         
       <rich:inputNumberSpinner id="spinnerField" value="" />    
     </h:form> 
</body> </html></f:view> 

J'utilise aussi riche: Hotkey pour ce champ de inputNumberSpinner. Mais Page rafraichie.

<rich:hotKey key="return" 
      selector="#spinnerField" 
      handler="event.stopPropagation();event.preventDefault(); 
      return false;"/> 

Et je vérifie une autre façon en utilisant javasccript, mais la page est rafraîchie.

La balise spécifique et javascript est:

<rich:inputNumberSpinner id="spinnerField" value="" 
         oninputkeypress="return stopPageRefresh();"/> 

<script type="text/javascript"> 

    function stopPageRefresh() 
    { 
     return false; 
    } 
</script> 

Ici j'utiliser un message d'alerte à l'intérieur de stopPageRefresh().
Mais j'appuie sur le bouton Enter, le rafraîchissement de la première page et le message d'alerte affiché.

Aidez-moi à ce sujet. Merci d'avance.

Répondre

1

Je ne suis pas un expert JSF, mais je pense que le problème est uniquement lié au JavaScript côté client.

Dans plusieurs navigateurs cannot prevent default actions en utilisant onkeypress (dans certains navigateurs vous pouvez, dans certains navigateurs, c'est le seul moyen d'empêcher les actions par défaut). Quoi qu'il en soit, c'est un gros bordel avec beaucoup de différences entre les navigateurs.

Le code suivant ajoutera le gestionnaire d'événements approprié à spinnerField. Exécutez-le dans un gestionnaire d'événements onload ou, au moins, après le rendu spinnerField.

if (window.opera) 
    document.getElementById("spinnerField").onkeypress = noEnter; 
else 
    document.getElementById("spinnerField").onkeydown = noEnter; 

function noEnter(e) { 
    var event = e || window.event; 

    if (event.keyCode == 13) 
    return false; 
} 

Mise à jour: Peut-être vous devez définir la propriété cancelBubble dans IE pour empêcher complètement la présentation sur Entrez, mais je ne suis pas sûr. Si l'exemple ci-dessus ne fonctionne pas correctement dans le produit de Microsoft, remplacez noEnter avec:

function noEnter(e) { 
    var event = e || window.event; 

    if (event.keyCode == 13) { 
    event.cancelBubble = true; 
    return false; 
    } 
} 
+0

Merci pour vos efforts. Mais je teste un message d'alerte à l'intérieur de votre script. Cette alerte est également appelée après l'actualisation de la page. – Eswar

+0

@eswa: Message d'alerte? Où mettez-vous cette ligne? –

+0

Après avoir ouvert les accolades, j'ajoute le message d'alerte. funtion noEnter (e) { alerte ("démarrer le processus ..."); // Ici j'utilise votre code } – Eswar

0

Juste i modifier votre script comme ajouter un message d'alerte.

<script type="text/javascript"> 

document.onkeydown=noEnter; 
if (window.opera) 
     document.getElementById("spinnerField").onkeypress = noEnter; 
else 
    document.getElementById("spinnerField").onkeydown = noEnter; 

function noEnter(e) 
{ 
     alert("start..."); 
     var event = e || window.event; 
     if (event.keyCode == 13) 
     { 
     event.preventDefault(); 
     return false; 
     } 
} 
+0

Ici avant d'ouvrir le popup (alerte), page rafraichie. – Eswar

+0

Je pense que c'est un problème lié au composant JSF. Si vous connaissez jsf forum connexe, alors s'il vous plaît pouvez-vous mentionné. Aidez-moi. – Eswar

+0

Vous ne devez pas joindre un événement 'onkeydown' dans tous les cas ... De plus, l'alerte apparaîtra à chaque pression de touche. Si vous le placez dans le bloc if, il ne se déclenchera que si vous appuyez sur Entrée. –

0

il peut être corrigé par la mise à jour de la bibliothèque Richfaces (au moins pour la RF 3.x). Vous devez réparer les sources dans RF et le reconstruire. ça marche pour moi

  1. Télécharger RichFaces sources
  2. Extrait les et accédez au fichier dans lequel forme la soumission se fait « ui/inputnumber-fileur/src/main/resources/org/richfaces/RenderKit /html/script/SpinnerScript.js "
  3. commentez this.edit.form.submit();

    if (e.keyCode == 13){ 
        if (this.spinner.required || "" != this.edit.value) 
         this.edit.value = this.getValidValue(this.edit.value); 
        if (this.edit.form) { 
         this.edit.form.submit(); //!!comment it 
        } 
    } 
    

    }

reconstruire les richfaces

voir les détails ici http://achorniy.wordpress.com/2010/11/06/disable-enter-form-submit-fix-inputnumberspinner/

Questions connexes