【问题标题】:jQuery UI Dialog Changes URL on Enter KeyPressjQuery UI 对话框在 Enter KeyPress 上更改 URL
【发布时间】:2013-08-25 18:25:00
【问题描述】:

我正在尝试使用 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 键时工作。

现在,当我在input#answer 中输入asd 并按回车键时,URL 如下所示:

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。然而,我不希望它修改 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");
      }
    });

【问题讨论】:

  • 听起来像一个错误。也许你可以阻止默认(e.preventDefault())并假装点击所述按钮($('thingy').click())。
  • 您使用的是提交按钮吗??还是没有它???
  • @Sumurai8 谢谢!无需伪造点击,我可以在输入时调用一个函数。我现在将检查如何使用 preventDefault。或者您可以将其发布为答案:)
  • @Gokul 我在 jQuery 代码中添加按钮。我现在将在我的问题中添加代码。
  • e.preventDefault() 是对的,防止提交表单。或者您可以使用&lt;form onsubmit="return false"&gt; 根本不提交。

标签: javascript jquery ajax forms jquery-ui


【解决方案1】:

您可以使用event.preventDefault() 阻止事件的默认操作。我不是 100% 确定表单在 jQuery-ui 中的样子以及阻止默认按键是否有效。作为替代方案,您可以阻止 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();
    }
});

【讨论】:

    【解决方案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 提交或请求....

    希望对你有帮助...

    【讨论】:

    • 确实如此。但是,出于某种原因,我不喜欢使用 html 属性,我想在 JavaScript 中处理所有事情,我猜想是为了可重用代码:) 如果 sumurai8 没有发布他的答案,我会接受你的。
    【解决方案3】:

    DEMO

    试试这个,

    在输入答案中输入值并点击进入

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

    希望对你有帮助

    【讨论】:

    • 应该,但在我的情况下,表单位于 jQuery UI 的模式对话框中,而不是纯 HTML。还是谢谢!
    猜你喜欢
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多