Od kilku miesięcy używam następującej konstrukcji, gdy potrzebują stworzyć jakąś listę elementów formularza:
var hours = new Array();
/** tutaj wczytywanie elementów z Smarty **//** tworzenie input-ów **/
function loadHours(thisHour, i, array)
{
/** tworzenie input-a dla danego elementu **/
}hours.forEach(loadHours);
I zawsze mi to działało…
Dopóki ktoś nie uruchomił tego w IE. Okazało się, że tam standardowo nie ma zaimplementowanej obslugi Array.forEach(), bardzo ułatwiającej życie. Dlatego przed wszystkimi operacjami JS należy dodać, taki oto fragment:
if (!Array.prototype.forEach)
{
Array.prototype.forEach = function (closure)
{
var context = arguments[1] || null;
for (var i = 0; i < this.length; i ++)
{
arguments[0].call(context, this[i], i, this);
}
}
}
i po problemie w IE 🙂