如何通过Firefox中的淘汰回调函数传递'event'参数?

时间:2017-07-20 08:13:03

标签: javascript jquery firefox knockout.js

所以我有一个main函数,它应该验证我们是否有权执行回调函数。它在chrome和opera上运行良好,但我无法弄清楚如何在Firefox中获取事件参数。

Here's a working example (jsfiddle),尝试在firefox上执行它将返回:

  

ReferenceError:未定义事件

HTML:

<button data-bind="click: validation.bind($data,true,callback,'callback_param1_because_of_reasons',event)" id="test">
test
</button>

JS:

    var ViewModel = function () {

      this.validation = function(param1, callback){
        var do_validations = param1;

        if(do_validations){
            var parameters_a = [];
            $.each(arguments,function(key,val){
                if(typeof val != "undefined"){
                    parameters_a.push(val);
                }
            });

            //Executa el cb
            parameters_a.splice(0,2);
            callback.apply(this,parameters_a);
        }

        };

      this.callback = function(param1, event){
        event.preventDefault();
        event.stopPropagation();
        $(event.target).hide();
        alert(param1+" ...everything's gonna be alright");
      };
    }

ko.applyBindings(new ViewModel());

对不起制表的麻烦。

1 个答案:

答案 0 :(得分:2)

Knockouts click或其他event绑定将始终传递两个参数:

  1. 绑定上下文的当前$data
  2. 原始event
  3. 通过设置this上下文(第一个参数)并附加传递的任何其他参数来绑定。 Knockout将尊重这些绑定参数,并在最后添加数据和事件。

    这意味着您的侦听器功能的签名最后应包含dataevent。因此,它可以修复bind所需的参数数量,或者如果您想要不同的金额,则需要使用array

    示例:

    var vm = {
      myListener: function(arg1, arg2, data, event) {
        console.log("Arg 1:", arg1);
        console.log("Arg 2:", arg1);
        console.log("vm:", data);
        console.log("event:", event.type);
      }
    }
    
    ko.applyBindings(vm);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
    <button data-bind="click: myListener.bind(null, 'arg1', 'arg2')">click</button>