2013-12-12 2 views
-1

У меня есть небольшая проблема, как взять переменную «j» и распечатать ее вне функции. Переменная «j» находится в цикле for, который подсчитывает количество входных данных, я хочу взять эту переменную вне этой всей функции. Пожалуйста, помогитеJQuery: Как получить переменную локальную внешнюю функцию?

$(function() { 
    var scntDiv = $('#p_scents'); 
    var i = $('#p_scents p').size() + 1; 

    if (i == i) { 
     document.getElementById("counter").innerHTML = 1; 
    } 
    $('#addScnt').live('click', function korzen() { 
      $('<p><label for="p_scnts"><input type="text" id="p_scnt' + i + '" size="20" name="p_scnt_' + i + '" value="" placeholder="id' + i + '" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv); 
      i++; 

      for (var j = 1; j < i; j++) { 
       //-----"j" this varible otuside function 
      } 
      return false; 

     } 
    ); 

    $('#remScnt').live('click', function() { 
     if (i > 2) { 
      $(this).parents('p').remove(); 
      i--; 

      for (var j = i; j >= i; j--) { 
       document.getElementById("distance_road").innerHTML = j - 1; 
      }; 

     } 
     return false; 
    }); 
}); 

document.getElementById("counter").innerHTML = j; 
+0

Определите 'var j' вне функции' live' handler. –

+0

Правильно отформатируйте свой код, прежде чем публиковать его. На самом деле, если вы хотите, чтобы ваш код немного поддерживался, отформатируйте его до того, как его совершить ... –

+0

Можете ли вы не просто установить его внутри своей функции? И как сторона примечания, какова точка вашего if (i == i) {line? – Paddy

ответ

0

Я сделал некоторые изменения в вашем коде ...

var j = 0; 

$(function() { 
    var scntDiv = $('#p_scents'); 
    var i = $('#p_scents p').size() + 1; 

    if (i == i) { 
     document.getElementById("counter").innerHTML = 1; 
    } 
    $('#addScnt').live('click', function korzen() { 
      $('<p><label for="p_scnts"><input type="text" id="p_scnt' + i + '" size="20" name="p_scnt_' + i + '" value="" placeholder="id' + i + '" /></label> <a href="#" id="remScnt">Remove</a></p>').appendTo(scntDiv); 
      i++; 

      for (j = 1; j < i; j++) { 
       //-----"j" this varible otuside function 
      } 
      return false; 

     } 
    ); 

    $('#remScnt').live('click', function() { 
     if (i > 2) { 
      $(this).parents('p').remove(); 
      i--; 

      for (j = i; j >= i; j--) { 
       document.getElementById("distance_road").innerHTML = j - 1; 
      }; 

     } 
     return false; 
    }); 
}); 

document.getElementById("counter").innerHTML = j; 
0

прототип того, что у вас есть:

(function() { 
    for(var i=0; i<10;i++) { 
    console.log(i); 
} 
})(); 
console.log("i: "+i); 

приводит к: Uncaught ReferenceError: i is not defined

удалить var в for-loop, и у вас есть глобальная переменная:

(function() { 
    for(i=0; i<10;i++) { 
    console.log(i); 
} 
})(); 
console.log("i: "+i); 

также проверить его здесь: http://jsfiddle.net/7t8Xy/

Дополнительное примечание:

  • Когда вы используете глобальные переменные используют префикс ваших переменных. Вероятность того, что какой-то другой код также использует j, так как variablename большой. Я пытаюсь предотвратить глобальные переменные. Но если мне нужно использовать префикс, например имя проекта или название компании. В вашем случае может быть только my_j.
  • Используйте хорошее имя для глобальных переменных. i или j в петле в порядке. Но, как глобальная переменная, это не нормально. 2000 строк от этого for-loop никто не знает, что представляет j. Используйте имя, которое описывает переменную. В вашем случае - я не уверен, что означает j, его просто догадка - может быть, my_maxDistanceRoad.
Смежные вопросы