2011-01-16 264 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声明中)。