JavaScript onclick, анонимная функция

В Swift 3 вы можете сделать следующее

UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
5
задан Juergen 14 April 2015 в 16:12
поделиться

1 ответ

Ваши обработчики событий образуют замыкание, которое запоминает «живой» указатель на переменные в охватывающей области. Таким образом, когда они фактически выполняются, они имеют последнее значение imgSource и imgTitle .

Вместо этого вы можете использовать этот шаблон для локализации значений переменных. Это будет создавать копии источника и заголовка внутри getClickHandler при каждом его вызове. Таким образом, возвращенная функция запоминает значения в этой итерации цикла.

//Check those anchors with rel=litebox
for(i = 0;i < elem.length;i++){
    if(elem[i].rel == "litebox"){
        imgSource = elem[i].href.toString();
        imgTitle = elem[i].title;
        elem[i].childNodes[0].style.border="0px solid #fff";
        elem[i].onclick = getClickHandler(imgSource, imgTitle);
    }
}


//Brings up the image with focus
function getClickHandler(source,title){
    return function() {
        document.getElementById("liteBox").style.display = "block";
        document.getElementById("liteBox").innerHTML = "<h1>" + title + "</h1>" +
                                               "<img src='" + source + "'/><br />" +
                                               "<a href='#' onclick='liteBoxClose();'><img src='images/litebox_close.gif' border='0' alt='close'/></a>";
        document.getElementById("liteBoxBg").style.display = "block";
    }
}
10
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: