为什么要调用jQuery的unbind('change')方法来触发更改事件?

时间:2014-11-06 04:40:39

标签: javascript jquery unbind

下面是我从一个较大的脚本中提取的一些JavaScript,用于允许AJAX样式的图像上传,作为StackOverflow使用的降价编辑器的一部分。

只要您使用HTML表单文件字段从计算机中选择图像,它就会触发脚本执行图像上传并返回新上传图像的URL。

这条线特别令我好奇,我需要帮助更好地理解它...

$file.unbind('change').ajaxfileupload()

我了解unbind('change')触发了change事件发生的上传。但是我很困惑为什么会使用unbind()

据我所知,该函数主要用于删除事件处理程序?我的逻辑是认为它会改为使用bind(),而是使用unbind()代替它,它只是起作用!但我不知道为什么 我在这里错过了什么?这里有足够的代码来回答我的问题吗?

我是否认为unbind()用于删除/阻止事件处理程序再次运行?如果我是对的,那么我不确定为什么它会被附加到一个据说相反的元素并等待图像触发上传?

希望这对所有人都有意义,他们可以指出我正确的方向,一个简单易懂的答案会很精彩,谢谢!

var $file = $('input[type=file]', $dialog);

// upload
$file.unbind('change').ajaxfileupload({
    action: $file.attr('data-action'),
    params: {
        enctype: 'multipart/form-data'
    },
    onStart: uploadStart,
    //onComplete: uploadComplete
    'onComplete': function(response) {
      console.log(response);
      alert(JSON.stringify(response));
    }
});

1 个答案:

答案 0 :(得分:1)

我的想法是unbind()实际上正在删除change事件的事件处理程序。如果我们查看.unbind()的jQuery文档,似乎没有歧义。那么代码可能会做什么呢?

我的猜测是先前添加了一个更改事件,我们想删除它。 $file.unbind('change').ajaxfileupload(....)的逻辑对我说...首先我们从$file引用的jQuery对象中删除change事件的任何事件处理程序,然后执行名为ajaxfileupload的小部件。