2013-08-24 26 views
0

我試圖讓jquery loadmask插件工作,將掩蓋元素(用於加載內容)。我使用的是knockout.js,並且如果我在viewmodel之外屏蔽了一個元素,它可以工作,但我希望在提交POST請求時將其屏蔽,然後在我收到它時取消屏蔽。我得到了一個「對象沒有方法掩碼」的錯誤。我不太清楚如何設置一個對象來訪問它。使用Javascript從另一個訪問函數

這有效,但它不是我想要的。我在哪裏,我想從

<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

我看到幾件事情可能是問題所在。

首先,您正在進行分配,而不是在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進行演示。

你甚至可以有淘汰賽幫你找去尋找元素:

this updated fiddle爲一個演示。

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

希望它有幫助。

+0

感謝您的建議,我會看看。視圖模型只是僞代碼,所以任何不準確都不算什麼。我很快打出來,所以我不用在這裏把一百行代碼切碎。 – user1406951

+0

嗯,如果你確定你的問題不是「快速輸入」隊友,你會得到更好的幫助(並且更快樂地誌願幫助陌生人),確保你發佈的代碼在語法上沒問題。現在*我*必須經過它試圖幫助你,而你*知道*它不是很好:'(。不冷靜... – Jeroen

+0

@Joroen我很抱歉,但我不明白這是如何改變任何東西我都有一些語法錯誤,但是這並不會改變我試圖訪問mask()函數的地方或方式。從功能的角度來看,它是一樣的。 – user1406951

相關問題