Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не правильно применяется функция в цикле (https://javascript.ru/forum/events/47702-ne-pravilno-primenyaetsya-funkciya-v-cikle.html)

dand1 04.06.2014 05:44

Не правильно применяется функция в цикле
 
Привет всем, собственно проблема в том, что когда я в цикле обхожу массив,
for (var key in opt.footer){
                        var _f = self.options.footer[key], _button = $(_f._button);
                        p.find(".p-footer").append(_button);
                        console.log(_f.action)
                        _button.click(function(evt){
                            _f.action(evt, p);
                        })
                    }

происходит какая то не понятная для меня ситуация, он применяет последнюю функцию к обеим button's, вот сам array
footer: [{_button: '<button>да</button>', action: function (evt, obj){
                                        obj.remove();
                                        alert("first")
                                        category_flag = true;

                                    }}, {_button: '<button >нет</button>', action: function (evt, obj){
                                        obj.remove();
                                        alert("second")
                                         }}]
,
подскажите как обойти эту проблему?

dand1 04.06.2014 06:02

$.each(self.options.footer, function (i, _f){
                        var div = document.createElement("div");
                        var _button = _f._button;
                        div.innerHTML = _button;
                        var f = function (){alert(_f.action)}
                        div.firstChild.addEventListener("click", function(evt){
                            f()
                        })
                        p.find(".p-footer").append(div);
//                        console.log(_f.action)
                    });

вот так нормально работает, а почему в цикле не применялся?

Aetae 04.06.2014 06:53

http://learn.javascript.ru/closures


Часовой пояс GMT +3, время: 08:23.