Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/04/2011, 09:40
Avatar de abimaelrc
abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Clausura (clousure) y/o Encapsulación

Saludos corillo,

Estoy preparando un material (tutorial) y en ese material requiero encapsular ciertos valores. Para los que no conocen el termino de closure o encapsulating, pueden leer estos materialesAhora me surge una duda de la forma como ustedes encapsularían. Si hago esto
Código HTML:
Ver original
  1. *{ cursor: default; }
  2. div{
  3.     background-color: #eee;
  4.     margin-top: 2px;
  5.     text-align: center;
  6.     font-size: 20px;
  7. }
  8. div:hover{ background-color: #ccc; }
  9. </head>
  10. <div id="foo">foo</div>
  11. <div id="bar">bar</div>
  12. <div id="baz">baz</div>
  13. <div id="candy">candy</div>
  14. <div id="fruits">fruits</div>
  15. <div id="vegetable">vegetable</div>
  16.  
  17. <script type="text/javascript">
  18. var divs = ['foo', 'bar', 'baz', 'candy', 'fruits', 'vegetable'];
  19. for(var i in divs){
  20.     var elem = document.getElementById(divs[i])
  21.     if (elem.addEventListener){
  22.         elem.addEventListener('click', function(e){
  23.             alert(divs[i])
  24.         }, false);
  25.     }else if (elem.attachEvent){
  26.         elem.attachEvent("onclick", function(e){
  27.             alert(divs[i])
  28.         });
  29.     }
  30. }
  31. </body>
  32. </html>
Siempre me traerá el último valor, ya que de por sí estoy haciendo referencia a la variable directamente y no al valor, por eso me trae siempre el último valor. Pero si lo hiciera así
Código HTML:
Ver original
  1. *{ cursor: default; }
  2. div{
  3.     background-color: #eee;
  4.     margin-top: 2px;
  5.     text-align: center;
  6.     font-size: 20px;
  7. }
  8. div:hover{ background-color: #ccc; }
  9. </head>
  10. <div id="foo">foo</div>
  11. <div id="bar">bar</div>
  12. <div id="baz">baz</div>
  13. <div id="candy">candy</div>
  14. <div id="fruits">fruits</div>
  15. <div id="vegetable">vegetable</div>
  16.  
  17. <script type="text/javascript">
  18. var divs = ['foo', 'bar', 'baz', 'candy', 'fruits', 'vegetable'];
  19. for(var i in divs){
  20.     (function(eDiv){
  21.         var elem = document.getElementById(eDiv)
  22.         if (elem.addEventListener){
  23.             elem.addEventListener('click', function(e){
  24.                 alert(eDiv)
  25.             }, false);
  26.         }else if (elem.attachEvent){
  27.             elem.attachEvent("onclick", function(e){
  28.                 alert(eDiv)
  29.             });
  30.         }
  31.     })(divs[i])
  32. }
  33. </body>
  34. </html>
Se resuelve el problema porque estoy haciendo referencia al valor no a la variable persé. Mi pregunta es ¿qué forma ustedes recomendarían usar?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 03/04/2011 a las 09:52 Razón: Modificar código para cross-browsing