在我的情况下,on()在绑定函数中不起作用

时间:2014-02-27 08:35:32

标签: javascript jquery

这是有效的

$("#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));

我的错误在哪里?

2 个答案:

答案 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看起来像一个闭包变量,如果你可以分享更多的问题上下文,我们可以更好看一下