jQuery UI对话框在输入KeyPress上更改URL

时间:2013-08-25 18:25:01

标签: javascript jquery ajax forms jquery-ui

我正在尝试使用AJAX提交表单,该表单是jQuery UI Dialog的内容。

我使用与jQuery's documentation

中相同的代码

但我修改了表单,因此只有一个文本输入,因此表单如下所示:

<form>
  <fieldset>
    <label for="answer"><strong>Your Answer : </strong></label>
    <input type="text" name="answer" id="answer" class="text ui-widget-content ui-corner-all" />    
  </fieldset>
  </form>

单击“确定”(或“创建用户”)按钮时,它可以正常工作,即使用AJAX提交答案,但我也希望按Enter键时可以正常工作。

现在,当我在asd中输入input#answer并按回车键时,会生成如下网址:

mysite.com/?answer=asd

我尝试添加功能:

  $('#answer').keypress(function(e) {
    if (e.keyCode == $.ui.keyCode.ENTER) {
          alert("enter pressed on answer input");
    }
});

这次它会提醒"enter pressed on answer input",然后转换网址。然而,我不希望它修改URL,我该如何删除该功能?在哪里定义?

简而言之,我希望回车键只做我想做的事。

感谢您的帮助!

编辑:

按钮 - 用于点击鼠标的按钮 - 添加在jQuery.dialog();中,如下所示:

$( "#dialog-form" ).dialog({
      autoOpen: false,
      height: 300,
      width: 350,
      modal: true,
      buttons: {
        Answer: function() {
            var answer = $("#dialog-form #answer").val();
            alert("your answer : "+answer);
                    submit_with_ajax(answer);
        },
        Cancel: function() {
          $( this ).dialog( "close" );
        }


      },
      close: function() {
        allFields.val( "" ).removeClass( "ui-state-error" );
        alert("asd");
      }
    });

3 个答案:

答案 0 :(得分:3)

您可以使用event.preventDefault()阻止事件的默认操作。我不是100%确定jQuery-ui中的表单是什么样的,如果防止keypress的默认设置有效。作为替代方案,您可以阻止submit事件的默认操作,正如您可能预期的那样,会阻止提交表单(根据Gokul的回答)。有关event.preventDefault()

的详细信息,请参阅mdn
$('#answer').keypress(function(e) {
    if (e.keyCode == $.ui.keyCode.ENTER) {
          e.preventDefault();
    }
});

- 或 -

$('whatevertheuiformis').on( 'submit', function(e) {
    if (e.keyCode == $.ui.keyCode.ENTER) {
          e.preventDefault();
    }
});

答案 1 :(得分:2)

和你一样......

<form>
<!-- <form onsubmit="return false"> is an optional -->
<fieldset>
    <label for="answer">
        <strong>Your Answer : </strong>
    </label>
    <input type="text" name="answer" id="answer" 
           class="text ui-widget-content ui-corner-all" />
</fieldset>
</form>

//jQuery Version
$('form').submit(function(){
    return false;
});
// javascript
document.getElementById('my-form').onsubmit = function() {
    return false;
}
$('#answer').keypress(function(e) {
    if (e.keyCode == $.ui.keyCode.ENTER) {
        e.preventDefault();
        //alert("enter pressed on answer input");
        submit_with_ajax(answer);
    }
});

所以这里表格根本不会提交..所以你可以执行你的AJAX提交或请求......

希望它有所帮助...

答案 2 :(得分:1)

<强> DEMO

试试这个,

在输入答案中输入值,然后单击输入

$(document).ready(function () {
     $(document).on('keypress',function(e)
               {
                if(e.which==13 && $("#answer").val().length>0)
                {
                    alert("hi"); // do your ajax call here
                }
          });
});

希望这有帮助