2011-10-15 3 views
2

J'ai mis en place une clé et je peux faire apparaître la recaptcha sur la page elle-même mais je ne sais pas comment la mettre dans un formulaire.ExtJS 4 recaptcha form

En fait, je ne veux pas utiliser un identifiant car je vais réutiliser cela plus tard dans l'application aussi, donc utiliser itemId serait préférable. Je suppose que l'élément n'a pas encore été créé.

Mon comprennent: Code HTML: (. Généré à partir recaptcha_ajax.js Impossible d'obtenir le contrôle avec l'id 'recaptcha')

<script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script> 

Erreur: Uncaught TypeError: Impossible de définir la propriété 'innerHTML' de null

Voici le code:

Ext.define('Login.view.Login', { 
extend: 'Ext.form.Panel', 
alias: 'widget.Login.view.Login', 


border: false, 
bodyPadding: 5, 


initComponent: function() { 


    var config = { 
     layout: 'anchor', 
     defaultType: 'textfield', 
     defaults: { 
      anchor: '100%', 
      allowBlank: false 
     }, 
     items: [{ 
      fieldLabel: 'Company Id', 
      name: 'companyId' 
     },{ 
      fieldLabel: 'Username', 
      name: 'username' 
     },{ 
      fieldLabel: 'Password', 
      name: 'password', 
      inputType: 'password' 
     },{ 
      /*xtype: 'panel', 
      itemId: 'reCaptcha', 
      border: false,*/ 
      html: '<div id="recaptcha">adsf</div>' 
     }], 
     buttons: [{ 
      text: 'Login' 
     }] 
    }; 
    Ext.apply(this, config); 


    this.callParent(); 
}, 
afterRender: function() { 
    Recaptcha.create("heres_my_public_key", 
     document.getElementById('recaptcha'), 
     { 
      theme: "clean"/*, 
      callback: Recaptcha.focus_response_field*/ 
     } 
    ); 
    this.callParent(); 
} 
}); 

Tout le monde fait cela en utilisant ExtJS 4?

/K

+1

Veuillez ne pas utiliser seulement des liens externes dans vos articles. S'ils se brisent, tout le message ne vaut rien ... – sra

+0

noté. en fait assez drôle. Sencha est descendu aujourd'hui ... et est toujours en panne. – Asken

Répondre

3

captcha créé trop tôt. Solution:

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <link rel="stylesheet" href="ext-4.0.6/resources/css/ext-all.css" type="text/css"> 
    <link rel="shortcut icon" type="image/png" href="../Icon.png"> 
    <script type="text/javascript" src="ext-4.0.6/ext-all-debug.js"></script> 
    <script type="text/javascript" src=""></script> 
    <script type="text/javascript"> 

Ext.define('Login.view.Login', { 
    extend: 'Ext.form.Panel', 
    alias: 'widget.Login.view.Login', 

    border: false, 
    bodyPadding: 5, 

    initComponent: function() { 

     var config = { 
      layout: 'anchor', 
      defaultType: 'textfield', 
      defaults: { 
       anchor: '100%', 
       allowBlank: false 
      }, 
      items: [{ 
       fieldLabel: 'Company Id', 
       name: 'companyId' 
      },{ 
       fieldLabel: 'Username', 
       name: 'username' 
      },{ 
       fieldLabel: 'Password', 
       name: 'password', 
       inputType: 'password' 
      },{ 
       xtype: 'panel', 
       itemId: 'reCaptcha', 
       border: false, 
       html: '<div id="recaptcha">adsf</div>', 
       listeners:{ 
        { 
         console.log(Ext.getDom(this.body)); 
         Recaptcha.create("heres_my_public_key", 
          Ext.getDom(this.body), 
          { 
           theme: "clean", 
           callback: Recaptcha.focus_response_field 
          } 
         ); 
        } 
       } 
      }], 
      buttons: [{ 
       text: 'Login' 
      }] 
     }; 


     Ext.apply(this, config); 

     this.callParent(); 
    }/*, 
    afterRender: function() { 
     var captchaEl = Ext.get('recaptcha'); 
     console.log(captchaEl); 
     Recaptcha.create("heres_my_public_key", 
      document.getElementById('recaptcha'), 
      { 
       theme: "clean", 
       callback: Recaptcha.focus_response_field 
      } 
     ); 
     this.callParent(); 
    }*/ 
}); 

// entry point 
Ext.onReady(function() { 
    var l = Ext.create('Login.view.Login', {renderTo:Ext.getBody()}); 
}); // eo onReady 

</script> 
</head> 
<body> 
</body> 
</html> 
1

// après avoir créé reCaptcha div, appelez les lignes suivantes.

< div id = "reCaptcha"> </div>

if ($ ("# reCaptcha") de longueur.> 0)

 showRecaptcha("reCaptcha"); 
showRecaptcha (élément) de la fonction

{

$.getScript('http://www.google.com/recaptcha/api/js/recaptcha_ajax.js', 
    function() { 
     Recaptcha.create("your public key", element, { 
      theme: "red", 
      callback: Recaptcha.focus_response_field 
     }); 
    }); 

}

+0

Déjà répondu il y a longtemps et pas vraiment une réponse à la question ... – Asken