使用Javascript从另一个中访问函数

Accessing function from within another with Javascript

本文关键字:访问 函数 另一个 Javascript 使用      更新时间:2023-09-26

我正在尝试让jquery loadmask插件工作,它将屏蔽元素(用于加载内容)。我使用的是knockout.js,如果我在视图模型之外屏蔽一个元素,它就可以工作,但我想在提交POST请求时屏蔽它,然后在收到它时取消屏蔽。我收到了一个"对象没有方法屏蔽"的错误。我不太确定如何设置一个对象来访问它。

这行得通,但不是我想要的。我在代码中注意到,我想从调用掩码

<div id = "register_container">
    <div data-bind="visible: register()">
          <div id = "register_form"> <!--this is the div I want to mask -->>
              <button data-bind="click: submitRegistration">Submit</button>
          </div>
     </div>
</div>
function MyViewModel(){
     self.submitRegistration = function(){
           //I want to mask here. When I try it says Object[object object] has no method mask
            $.post....{
                if(data.result == success){
                     // andunmask here
                }
            }
      }
}
$("#register_form").mask("Waiting...");  //the masking works when I place it here, but it's always enabled and I want it inside the viewmodel where I noted so it only works when the POST request is in process

这很好,但我想从我注意到的视图模型内部屏蔽一些东西。我怎样才能做到这一点?

我发现了一些问题。

首先,您在if语句中进行赋值,而不是比较。使用这个替代:

if(data.result == success){

甚至

if(data.result === success){

其次,我不太理解您的代码self.submitRegistration(){,它通常看起来更像这样:

var MyViewModel = function () {
    var self = this;
    self.submitRegistration = function() {
    };
};

然后,如果我模拟$.post调用,它的工作方式如下:

var MyViewModel = function () {
    var self = this;
    self.register = ko.observable(true);
    self.submitRegistration = function() {
        $("#register_form").mask("Waiting...");
        // Mock $.post
        window.setTimeout(function () {
            if (1 == 1) {
                // andunmask here
                $("#register_form").unmask();
            }
        }, 3000);
    }
};
ko.applyBindings(new MyViewModel());    

请看这把小提琴的演示。

你甚至可以让Knockout帮助你找到要寻找的元素:

看看这个更新的小提琴的演示。

    // Use the "event" parameter to find the element...
    self.submitRegistration = function(data, event) {
        $(event.target).closest('#register_form').mask("Waiting...");

希望能有所帮助。