禁用表单按钮onClick,然后提交表单

时间:2012-08-29 20:15:42

标签: javascript jquery coffeescript

我的表单可让用户提交一首诗。

有时,该页面上有一个新用户名字段(如果没有人登录)。在这种情况下,我想覆盖按钮单击,以便首先签名:

$('#submit-poem').click ->
  $('input[type=submit]').attr('disabled', true)
  if $('#new_poet_name_field').length
    signUp();  // This will submit the poem form after registering
    false
  else
    console.log("A poet was already logged in!")
    true

这曾经很好用。但是现在,当没有new_poet_name_field时,提交按钮保持禁用状态。返回用于提交表单的true。现在,如果没有$('#new_question')[0].submit(),我必须明确地poet_name_field

为什么返回true时表单不会提交?我的解决方法令人担忧;表单现在可能会提交两次:一次是在我明确提交时,一次是在返回true时。

2 个答案:

答案 0 :(得分:1)

您应该绑定到表单'submit'事件,并在您希望某人注册而不是提交诗时使用preventDefault / return false。这样就不需要对按钮进行任何禁用/启用了。

答案 1 :(得分:0)

我不喜欢没有表格的想法。它无效,肯定不遵循HTML的规范。

每个建设性表单元素都应该包装在表单标记内。您可以通过多种方式控制表单的提交。


您使用的代码非常糟糕

  1. WHY ??是否有多个提交按钮?下面的代码禁用页面上的每个提交按钮,也可以是其他形式。

    $('#submit-poem').click ->
      $('input[type=submit]').attr('disabled', true) 
    
  2. 这是检查提交真实性的错误方法,可以使用像firebug这样的工具轻松操作。

    if $('#new_poet_name_field').length
        signUp(); 
    

  3. 如果发现用户是否登录了那么重要,那么您可以快速向服务页面发送ajax请求,从而获取该信息

    $('#submit-poem').click(function() {
        $(this).attr('disabled', true)
        $.post("yourservicepage.php", {}, function(data) {
              // RE suppose, data is the boolean value from server indicating logged in or not
              if(data != true) {
                 signup(); //if not logged in then signup
              }
              //...
        });
    });