Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316

    Classe definita in (function() {/**/}();) renderla globale

    Ciao ragazzi,

    ho scritto una classe di cui riporto il pezzo di codice incriminato:
    codice HTML:
    <script>
    (function() {
      "use strict";
        
        /* [...] */
      var Keyboard = {
    
        /* [...] */
        get_tooltip : function() {
          var   _this    = this
              , value    = this.innerHTML
              , position = Keyboard.get_position(this);
    
          if (special_chars_1.indexOf(value) == -1 &&
              special_chars_2.indexOf(value) == -1)
          {
            (!Keyboard.caps_lock ? lower_chars : upper_chars).forEach(function(v, k, a) {
              if (v.length > 1 && value == v[0]) {
                var   left = 0
                    , i    = 0;
                
                for (; i < v.length; i++) {
                  var div = document.createElement("div");
                      
                  div.setAttribute("id"     , "uniq_" + i);
                  div.setAttribute("class"  , "prova prova2");
                  div.setAttribute("style"  , "top: " + (position.top - 42) + "px; left: " + (position.left + left) + "px;");
                  div.setAttribute("onClick", "Keyboard.insert_char(this.innerHTML)");
                  div.innerHTML = v[i];
                      
                  document.body.appendChild(div);
                  
                  Keyboard.tooltip[i]    = new Array();
                  Keyboard.tooltip[i][0] = i;
                  Keyboard.tooltip[i][1] = _this;
    
                  left += 40;
                }
              }
            });
          }
        },
          
        insert_char : function(add) {
          var password = document.getElementById('password');
          
          password.value = password.value + add;
        },
          
        /* [...] */
      }
    </script>
    Se potete notare la riga: div.setAttribute("onClick", "Keyboard.insert_char(this.innerHTML)"); non funzionerà mai perchè ovviamente la classe Keyboard la definisco dentro a una funzione, ed anche se definisco var Keyboard = {}; al di fuori di essa non funziona.
    Logiqo.org gestionale per perizie infortunistiche.

  2. #2
    forse dico una scemenza, ma non puoi usare this?
    codice:
    div.setAttribute("onClick", "this.insert_char(this.innerHTML)");

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Quote Originariamente inviata da fermat Visualizza il messaggio
    forse dico una scemenza, ma non puoi usare this?
    codice:
    div.setAttribute("onClick", "this.insert_char(this.innerHTML)");
    ciao no il this essendo inserito nell'onclick va a prendere come riferimento il div e non classe.

    Comunque cito un utente che mi ha risposto su un forum di linux (non so se posso linkare direttamente il topic quindi quoto e via)

    Quote Originariamente inviata da Zoff
    Stai usando lo strict-mode è normale che sia così.

    Scrivere il codice js come stringa in un attributo è decisamente sconsigliabile. Basta usare addEventListener:
    codice:
    div.addEventListener('click', function(){ Keyboard.insert_char(this.innerHTML); })
    In questo modo eviti la necessità che Keyboard sia visto globalmente.


    Consiglio di guardare lo standard AMD e RequireJS su come gestire le dipendenze in javascript.
    Per il futuro sono utili anche i moduli di ECMAScript 6 (ovvero la nuova versione di JS): https://developer.mozilla.org/en-US/...tements/import
    Ultima modifica di zacca94; 19-06-2015 a 15:14
    Logiqo.org gestionale per perizie infortunistiche.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    una soluzione è quella, l'altra è quella di rendere globale Keyboard, per farlo basta togliere il var.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    Quote Originariamente inviata da Vindav Visualizza il messaggio
    una soluzione è quella, l'altra è quella di rendere globale Keyboard, per farlo basta togliere il var.
    ty lo terrò presente per il futuro
    Logiqo.org gestionale per perizie infortunistiche.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.