2011-01-16 263 views
2

嘿傢伙, 我有一個表單,可以用上下鍵來進行影響。jquery:防止表單提交

沒有這個代碼它只是一個正常的輸入搜索字段,觸發一個正常的行爲。但是我想知道當我使用向上和向下箭頭鍵更改輸入字段的值時,如何停止默認行爲。

看看這個:http://jsfiddle.net/3UHVY/7

我只是想,如果我改變與上下鍵框的值發生警報,​​否則警報不應該被解僱和形式應該可以正常提交。但是,如果通過箭頭鍵更改了輸入值,則應該觸發警報,並且不應提交表單。

任何想法如何解決?

回答

1

http://jsfiddle.net/3UHVY/14/

var ok=0; 
$(window).keydown(function(e) { 

$('.s').focus(); 
switch (e.keyCode) { 
case 38: // Up 
    $('.s').val('Up pressed'); 
    ok=1; 
    break; 
case 40: // Down 
    $('.s').val('Down pressed'); 
    ok=1; 
    break; 
case 13: // Enter 
    if(ok) 
    alert($('.s').val()); 
    break; 
default: 
ok=0; 
break; 
} 
}); 
+0

我正在正好在尋找這樣一個解決方案,但是你不能爲我工作。如果使用向上或向下鍵更改文本,警報就會被觸發,但表格也會被提交。如果警報被解僱,我不希望表單提交! – matt

+0

我很笨!返回false就是這樣!謝謝,謝謝 – matt

1
function FormHandler() { 
    var changedByUpDown = false; 
    this.onKeyDown = function(event) { 
    if (event.keyCode == 38 || event.keyCode == 40) { 
     changedByUpDown = true; 
    } 
    }; 
    this.onSubmit = function(event) { 
    if (changedByUpDown) { 
     alert('Changed by up/down'); 
     return false; 
    } 
    return true; 
    } 
} 

var fh = new FormHandler(); 
$('#search_form').submit(fh.onSubmit); 
$('#searchsubmit').keydown(fh.onKeyDown); 

幾點注意事項:

  • 可以返回false(停止 事件)按Up/Down,到 停止默認向上/向下的行爲 (自動完成建議)
  • 你可以設置changedByUpDown爲false總是 當用戶輸入不同的東西 比上/下,所以窗體是「新鮮的」
  • 可以按 時,當然添加 代碼提交表單輸入(13)
1

我不能完全確定要發生的事情,但下面的jQuery:

$('.s').keydown(
    function(e) { 
     var keyPreesed = e.keyCode; 

     if (keyPreesed == 38) { 
      var msg = "Up was pressed."; 
      $(this).val(msg); 
      alert(msg); 
     } 
     else if (keyPreesed == 40) { 
      var msg = "Down was pressed."; 
      $(this).val(msg); 
      alert(msg); 
     } 
     else { 
      // meither 'up' nor 'down' was pressed, do whatever 

      // $(this).closest('form').submit(); // <- this (uncommented) will trigger the form's submission. 
     } 
    }); 

JS Fiddle demo

問題是,我不知道你要觸發提交的位置,但我假設你想要提交發生如果既不 up或down是pres sed,因此它在else聲明中)。