2015-09-04 102 views
0

我想通過確認彈出窗口來保護輸入,並且當確認時,我想要刪除此保護,並將焦點輸入到輸入。 我的嘗試是:javascript:如何在觸發關閉(「焦點」)後關注對象

my_input.on('focus', switch_off_focus_handler(my_input)); 

function switch_off_focus_handler(input){ 
    var confirm = confirm("Are you sure?"); 
    if (confirm) { 
     input.off('focus'); 
     input.focus(); 
    } 
} 

當我點擊輸入,我得到了確認彈出。如果我點擊確定,on_focus處理程序確實被刪除(因爲在輸入上再次點擊不會觸發彈出窗口),但是輸入沒有獲得焦點。 (input.focus()似乎沒有效果)。

我做錯了嗎?編號: 對不起,這不是我使用的正確的代碼。這裏是(用html環​​境進行測試):

<!doctype html> 
<html> 
    <head> 
     <script src="/static/js/jquery-1.11.1.min.js" type="text/javascript"></script> 
    </head> 
    <body> 
     <input type="text" value="HALLO" id="my_input"> 
     <script type="text/javascript"> 
      my_input=$("input#my_input") 
      my_input.on('focus', switch_off_focus_handler(my_input)); 

      function switch_off_focus_handler(input){ 
       return function() { 
        var conf = confirm("Are you sure?"); 
        if (conf) { 
         input.off('focus'); 
         input.focus(); 
        } 
       } 
      } 
     </script> 
    </body> 
</html> 

這個問題似乎來自確認對話框。如果我通過

var conf = true; 

更換

var conf = confirm("Are you sure?"); 

然後它工作。

回答

0

您需要傳遞一個函數引用作爲焦點事件處理函數,處理函數this內將引用當前元素。

而且這是一個更好的做法是隻針對你的處理器,同時解除綁定的處理程序,對於一個可能的解決方案是使用事件命名空間

my_input.on('focus.confirm', switch_off_focus_handler); 

function switch_off_focus_handler() { 
    var confirm = confirm("Are you sure?"); 
    if (confirm) { 
     $(this).off('focus.confirm').focus(); 
    } 
} 

如果你不想改變語法該方法的,然後用一個匿名事件處理程序,它可以調用switch_off_focus_handler方法

my_input.on('focus.confirm', function() { 
    switch_off_focus_handler(this); 
}); 

function switch_off_focus_handler(input) { 
    var confirm = confirm("Are you sure?"); 
    if (confirm) { 
     $(input).off('focus.confirm').focus(); 
    } 
} 
+0

對不起。我確實使用了函數引用,但是我在最小的例子中複製了錯誤的代碼:(但它仍然不起作用,不知何故,因爲確認框,我將編輯我的問題。 –

0

我希望你要輸入被禁用,你想打開confirmat當他點擊被禁用的輸入,然後你想在用戶確認後啓用它。在這種情況下,將disabled添加到您的輸入中,然後使用以下代碼刪除禁用並使其正常工作。請注意,單擊事件不會綁定到禁用的輸入,因此您需要將輸入包裝在某個容器中(例如#container),然後綁定單擊該容器。

$("#container").on('click', function(){ 
    if(my_input.prop("disabled")){ 
    switch_off_focus_handler(my_input); 
    } 
}); 

function switch_off_focus_handler(input){ 
    var confirm = confirm("Are you sure?"); 
    if (confirm) { 
     input.prop('disabled', false).focus(); 
    } 
} 

希望這會有所幫助。看到這fiddle

+0

感謝與容器有關的想法。 –

+0

變量確認應該有另一個名稱作爲功能確認。 –

+0

是的謝謝我試過了,它的工作現在 –