0

我正在尝试让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

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

4

1 回答 1

0

我看到几件事可能是问题所在。

首先,您正在执行分配而不是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...");

希望能帮助到你。

于 2013-08-24T18:00:05.523 回答