2013-03-18 49 views
1

我知道這個問題到處都是,但這讓我瘋狂!按鍵事件後無法清除文本框

這裏是我的代碼:

$(document).ready(function() { 

     $('#MainContent_LoginUser_Password').keypress(function (e) { 

      noCapsLock($('#MainContent_LoginUser_Password'), e, "Please turn off Caps Lock"); 
     }); 

    }); 
function noCapsLock(o, e, str) { 
var s = String.fromCharCode(e.which); 
if (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey) { 
    alert(str); 
    o.val(''); 

}  
} 

我試圖清除指定id文本框的值。上面的代碼清除了文本,但是當按下新鍵時,顯示該鍵的值(大寫字母)。 我已經嘗試了change(),keyup(),keydown()函數,但它們似乎仍然沒有清除最後輸入的值的文本框。

任何幫助將不勝感激。謝謝!

+0

我覺得你最好的拍攝將是一個計時器:( – Ven 2013-03-18 21:43:43

+0

我有點想通的問題在於當不同的函數被調用時(按鍵,keydown,keyup等)。但是,我需要尋找哪一個呢? – Jose 2013-03-18 21:45:00

回答

1

你只需要添加一個event.preventDefault();

您可能還希望把瓶蓋內的功能,所以它不是全球性的,則不需要再次在方法內重新找到html元素:

$(document).ready(function() { 

    var noCapsLock = function(o, e, str) { 
     var s = String.fromCharCode(e.which); 
     if (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey) { 
      alert(str); 
      o.val(''); 
      e.preventDefault(); 
     }  
    }  

    $('#MainContent_LoginUser_Password').keypress(function (e) { 
     noCapsLock($(this), e, "Please turn off Caps Lock"); 
    }); 
}); 

踢我還做你的代碼放到一個jQuery插件,你可以很容易地應用到任何元素(它不刪除值只是停止按鍵):

(function($) { 
    $.fn.noCapsLock = function(message) { 
     this.keypress(function (e) { 
      var char = String.fromCharCode(e.which); 
      if (char.toUpperCase() === char && char.toLowerCase() !== char && !e.shiftKey) { 
       window.alert(message); 
       e.preventDefault(); 
      }   
     }); 
    }; 
})(jQuery); 

應用這樣的:

$(document).ready(function() { 
    $('#MainContent_LoginUser_Password').noCapsLock('Please turn off Caps Lock!'); 
}); 
+0

那真是美麗!!!瞬間解決了!!!所以這可以防止事件發生,在這種情況下,按鍵?謝謝!只需要將「事件」改爲「e」。 – Jose 2013-03-18 21:51:42

+0

@Jose很好的現場,我已經更新並添加了一些其他技巧喲你:-) – magritte 2013-03-18 22:00:12

+0

謝謝。我將這個標籤作爲答案,儘管對於我的目的@Vlad提供了一個有效的論點,並與他一起去,但這肯定是我發佈的一般問題的解決方案!謝謝。 – Jose 2013-03-18 22:02:41

1

你必須取消與e.preventDefault();事件:

function noCapsLock(o, e, str) { 
    var s = String.fromCharCode(e.which); 
    if (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey) { 
     e.preventDefault(); 
     alert(str); 
     o.val(''); 
    }  
} 
1

我也不清楚你的情況的文本框;如果用戶以小寫字母輸入長文本,然後點擊CapsLock,然後繼續輸入 - 整個輸入將被刪除。

至於功能上,你可以調用事件的preventDefault()方法或返回false(你可以read here on the differences between the methods):

$(document).ready(function() { 

     $('#MainContent_LoginUser_Password').keypress(function (e) { 
      return noCapsLock(e, "Please turn off Caps Lock"); 
     }); 

    }); 
    function noCapsLock(e, str) { 
     var s = String.fromCharCode(e.which); 
     if (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey) { 
      alert(str); 
      return false; 
     } 
     return true; 
    } 
+0

您帶來了一個非常有趣的觀點。而你的解決方式似乎更加優雅。 – Jose 2013-03-18 21:54:29

+0

感謝人:)我標記了一個不同的帖子作爲答案,但將與您一起去,因爲你提出了一個非常有效的論點,這需要精心照顧這個問題! – Jose 2013-03-18 22:03:42