2013-12-17 101 views
0

我有一個文本框,我正在對文本框的模糊事件進行一些驗證。我也有按鈕。檢查按鈕是否有焦點

目前我的文本框顯示驗證並將焦點設置回它。但我想要的是當我點擊按鈕時不顯示消息。

簡單地說,我不希望有驗證文本框後,點擊按鈕時失去了重心

我試圖檢查按鈕是否已集中使用此document.activeelement但返回我的身體

這裏是我的html

<input id="txtName" data-bind ="event: { blur: $root.check1 }" /> 
<button id="btnSubmit" class="btn" data-bind="click: check2" > Submit </button> 

這裏是我的視圖模型

var viewModel = { 

}; 


viewModel.check1 = function(){ 
    alert("duplicate name not allowed"); 
    $("[id$=txtName]").focus(); 
        return; 
} 

viewModel.check2 = function(){ 
    alert("alert from button click"); 
} 

ko.applyBindings(viewModel); 

這裏是Fiddle

回答

3

我只是延緩CHECK1邏輯檢查哪些元素獲得焦點:

DEMO

viewModel.check1 = function (e) { 
    $("[id$=txtName]").dequeue().delay(0).queue(function() { 
     if(document.activeElement === $('#btnSubmit')[0]) return; 
     alert("duplicate name not allowed"); 
     $(this).focus(); 
    }); 
    return; 
} 
+0

但現在我不,當我離開文本框 – Happy

+0

入住的jsfiddle得到警報,當離開文本框時,我得到'重複名稱不允許',而不是按鈕集中,在Chrome上測試。這不是你所期望的嗎? –

+0

哇,這太神奇了。我會做更多的檢查並接受答案。它會好嗎? – Happy