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

Javascript 为什么要调用jQuery的unbind('change')方法来触发更改事件?,javascript,jquery,unbind,Javascript,Jquery,Unbind,下面是我从一个更大的脚本中提取的一些JavaScript,该脚本用于允许像StackOverflow这样的标记编辑器上传AJAX风格的图像 一旦使用HTML表单文件字段从计算机中选择图像,它就会触发脚本进行图像上载,并返回新上载图像的URL 这句话特别让我好奇,我需要帮助更好地理解它,请 $file.unbind'change'.ajaxfileupload 我知道解除绑定的“更改”会触发上载,并与更改事件一起发生。但是我不明白为什么会使用unbind 据我所知,该函数基本上用于删除事件处理程序

下面是我从一个更大的脚本中提取的一些JavaScript,该脚本用于允许像StackOverflow这样的标记编辑器上传AJAX风格的图像

一旦使用HTML表单文件字段从计算机中选择图像,它就会触发脚本进行图像上载,并返回新上载图像的URL

这句话特别让我好奇,我需要帮助更好地理解它,请

$file.unbind'change'.ajaxfileupload

我知道解除绑定的“更改”会触发上载,并与更改事件一起发生。但是我不明白为什么会使用unbind

据我所知,该函数基本上用于删除事件处理程序?我的逻辑是,它将使用bind,但它;s使用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));
    }
});
我的想法是,取消绑定实际上是删除变更事件的事件处理程序。如果我们看一下jQuery文档,似乎没有任何歧义。那么代码可能在做什么呢


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

unbind'change'不会触发更改事件。它只是删除当前该元素上的任何事件处理程序。解除以前绑定的事件的绑定可能是为了防止重复处理文件。@PatrickEvans是对的。可能一种更干净的方法是在必要时使用并重新绑定。@PatrickEvans现在读了abut后变得更有意义了,但是让我感到不舒服的是,在代码中,我看不到任何其他地方会触发实际的文件上传!由于没有其他明显的事件触发上传,这使得它看起来像是在做它,我想我需要尝试并追踪到它的真正定义,感谢info@PatrickEvans在对我的全部代码进行更多的审查之后,实际上,在其他任何地方都没有定义这一点,因此似乎即使这不会触发更改事件,但在删除事件的过程中,它仍然会调用.ajaxfileupload的脚本函数,而该脚本函数反过来会触发/执行上载过程,这一切都是在一个步骤中完成的。排序操作系统误导性/草率的iMo,那么你是说在没有任何用户交互的情况下,onchange事件被触发,一些文件通过你使用的插件上传?