jquery:阻止表单提交

时间:2011-01-16 11:16:46

标签: jquery forms submit alert

嘿伙计们, 我有一个可以用上下键影响的表格。

没有该代码,它只是一个正常的输入搜索字段,可以触发正常的操作。但是我想知道当我使用向上和向下箭头键更改输入字段的值时,我可以如何停止默认行为。

看看这个:http://jsfiddle.net/3UHVY/7

如果我使用向上和向下键更改框的值,我只希望发生警报,​​否则不应该触发警报并且表格应该正常提交。但是,如果通过箭头键更改输入值,则应该触发警报并且不应提交表单。

任何想法如何解决?

3 个答案:

答案 0 :(得分: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);

很少有笔记:

  • 你可以返回假(停止 按上/下后,到 停止默认的上/下行为 (自动填充建议)
  • 您可以将changedByUpDown设置为false 当用户输入不同的东西时 比上/下,所以形式是“新鲜的”
  • 你当然可以添加 按下时提交表单的代码 输入(13)

答案 1 :(得分: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也没有按下,那么它就在{ {1}}声明)。

答案 2 :(得分: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;
}
});