【问题标题】:Why is my JS function executed onload instead of onchange?为什么我的 JS 函数执行的是 onload 而不是 onchange?
【发布时间】:2016-05-11 06:11:27
【问题描述】:

代码如下:

window.onload = function() {
    oldonload && oldonload();

    function test() {
        alert("meh");
    }    

    $('input[type=file]').change(test());
}

代码相当简单,test() 仅在 input[type=file] 更改时调用。但是,每当我的页面加载时,都会调用test()

这里发生了什么?仅当用户与输入元素交互时,我将如何执行该功能?

【问题讨论】:

  • 加载时发生,因为你这么说,使用onclick。

标签: javascript jquery input jquery-events


【解决方案1】:

你正在调用这一行的方法:

$('input[type=file]').change(test());

改成:

$('input[type=file]').change(test);

如果你想传递一个参数给test

var myVar = 5;
$('input[type=file]').change(function () {
   test(myVar); 
});

【讨论】:

  • 当后端被分配做前端工作时会发生这种情况......非常感谢你。我花了几个小时试图弄清楚!
  • 等等,那我怎么把参数传给test()
  • 那么您可以使用@DharaParmar 的示例,使用围绕test(myVar); 的匿名函数
【解决方案2】:

只需像这样更改文件更改事件:

 $('input[type=file]').change(function() { test() });

【讨论】:

  • 帕尔默 谢谢! +1 为您提供帮助!
【解决方案3】:

您正在立即执行函数,而不是分配处理程序。你应该这样做:

$('input[type=file]').change(test);

【讨论】:

  • 谢谢 :) +1 的及时帮助!
【解决方案4】:

change 将函数作为参数,所以你只需要提供要调用的函数名。

$('input[type=file]').change(test);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多