有这样一个方法,最后点击btn为S19,和S20的时候居然都弹出了{321C8C4C-125F-413A-9E0D-648A82E0FE0E},而不是{2043ECEE-0F93-457B-9CDB-D63680A07672}function InitButtonEvent() {    var json = { "{2043ECEE-0F93-457B-9CDB-D63680A07672}": { "EventFields": { "S19": "", "S20": ""} },
        "{321C8C4C-125F-413A-9E0D-648A82E0FE0E}": { "EventFields": { "S37": ""} }
    }
    for (var guid in json) {
        for (var btn in json[guid].EventFields) {
            $("#" + btn).bind("blur", function(event) { alert(guid) }); //通过for循环绑定方法
        }
    }}但是,一个一个的加进去,却能弹出正确的值来,难道是bug?
function InitButtonEvent() {
    $("#S19")[0].attachEvent("onblur", function(event) { alert(guid) });
    $("#S20")[0].attachEvent("onblur", function(event) { alert(guid) });
    $("#S37")[0].attachEvent("onblur", function(event) { alert(guid) });
}

解决方案 »

  1.   

    造闭包试试吧。function InitButtonEvent() {    var json = { "{2043ECEE-0F93-457B-9CDB-D63680A07672}": { "EventFields": { "S19": "", "S20": ""} },
            "{321C8C4C-125F-413A-9E0D-648A82E0FE0E}": { "EventFields": { "S37": ""} }
        }
        for (var guid in json) {
            (function(guid ){
                for (var btn in json[guid].EventFields)$("#" + btn).bind("blur", function(event) { alert(guid) }); 
            })(guid )
        }}