【问题标题】:javascript function running without being calledjavascript函数运行而不被调用
【发布时间】:2013-02-12 09:35:04
【问题描述】:

我想知道为什么一旦页面加载,函数btw_bijtellen () 就会被调用。我想通过点击来调用它...

var $ = function (id) {
    return document.getElementById (id);
}

function btw_bijtellen () {
    window.alert("we want to calculate something after clicking th button");
}

$("bereken").onclick = btw_bijtellen ();

【问题讨论】:

    标签: javascript function-calls


    【解决方案1】:

    您添加了(),它会导致函数执行。

    例如:

    var myFunc1 = function() {
        alert('Hello');
    }(); // <--- () causes self execution
    
    var myFunc2 = function() {
        return 5 + 5;
    };
    
    var some_value = myFunc2(); // <--- Again () causes execution (you'd expect this one)
    

    在您的情况下,如 cmets 中所述,您基本上是在告诉 onclick 将其值设置为函数的返回值。

    如果您删除(),它应该会按预期运行。

    【讨论】:

    • 顺便说一句,对于@bert,这意味着您的 onclick 处理程序被分配“未定义” - 因为运行返回“未定义”的此函数会将此结果分配给 onclick。
    • @Lloyd 所以在声明或调用时只有括号,其余的(只有分配的叶子?)没有括号?
    • 声明或调用是。对于分配,只需放下它们。
    【解决方案2】:

    如果您希望在单击时调用该函数,请使用

    $("bereken").on('click', btw_bijtellen);
    

    更新(根据 WAO 的查询)

    如果需要传递参数,则需要指定为第二个参数。 $.on() 获取 event 处理程序中的数据

    $("bereken").on('click', {key1: value1, key2: value2, keyn: valuen}, btw_bijtellen);
    

    在哪里,你可以从event.data获取你的参数

    var function = btw_bijtellen(event) {
        var data = event.data;
        console.log(data);
    
        var key1 = event.data.key1;
        console.log(key1);  // this will output value1
    }
    

    阅读此链接jQuery $.on() api

    【讨论】:

    • 如果你想将参数传递给'btw_bijtellen'函数怎么办?
    【解决方案3】:

    将() 放在函数名之后就是你的调用方式。

    如果您想将btw_bijtellen 分配给onclick,请从问题中代码的最后一行删除()。

    有了(),您正在调用该函数并将其返回值分配给onclick。由于该函数没有return 语句,因此该值将是undefined,这不是您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2016-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多