这是有效的
$("#closePreviewPhoto" + filesId).on('click',function(){
$('#list' + filesId).html("");
$('#files' + filesId).val("");
$('.thumb-canvas' + filesId).css('display','none');
});
但是当我尝试将它分开并使用函数时它不起作用:
function removePhoto(filesId){
$('#list' + filesId).html("");
$('#files' + filesId).val("");
$('.thumb-canvas' + filesId).css('display','none');
}
$("#closePreviewPhoto" + filesId).on('click', removePhoto(filesId));
我的错误在哪里?
答案 0 :(得分:5)
您正在传递函数调用的结果而不是函数。
更改
$("#closePreviewPhoto" + filesId).on('click', removePhoto(filesId));
到
$("#closePreviewPhoto" + filesId).on('click', function(){
removePhoto(filesId)
});
现在,请注意,可能有一个更简单的解决方案,而不是迭代所有filesId
来绑定函数,您可以直接对所有匹配元素进行绑定,并从点击的元素中推导出filesId
id:
$("[id^=closePreviewPhoto]").on('click', function(){
var filesId = this.id.slice("closePreviewPhoto".length);
$('#list' + filesId).html("");
$('#files' + filesId).val("");
$('.thumb-canvas' + filesId).css('display','none');
});
答案 1 :(得分:2)
您正在调用该函数,将其返回的值(在本例中为undefined)作为事件处理程序传递,而不是将其作为事件处理程序传递
$("#closePreviewPhoto" + filesId).on('click', function(){
removePhoto(filesId)
});
参数filesId
看起来像一个闭包变量,如果你可以分享更多的问题上下文,我们可以更好看一下