我正在尝试使用jquery loadmask插件来屏蔽元素(用于加载内容)。我正在使用knockout.js,如果我在viewmodel之外屏蔽了一个元素,它可以工作,但是我想在提交POST请求时屏蔽它,然后在收到它时取消屏蔽。我从这里得到一个“对象没有方法掩码”的错误。我不太确定如何设置一个对象来访问它。
这有效,但这不是我想要的。我在代码中注意到我想从
中调用mask<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
这很棒,但是我想在我注意到的视图模型中掩盖一些内容。我怎么能做到这一点?
答案 0 :(得分: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());
有关演示,请参阅this fiddle。
您甚至可以让Knockout帮助您找到要查找的元素:
有关此演示,请参阅this updated fiddle。
// Use the "event" parameter to find the element...
self.submitRegistration = function(data, event) {
$(event.target).closest('#register_form').mask("Waiting...");
希望它有所帮助。