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

Javascript 禁用表单按钮onClick,然后提交表单,javascript,jquery,coffeescript,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

我的表单允许用户提交一首诗

有时,页面上会有一个新用户名字段(如果没有人登录)。在这种情况下,我希望覆盖“单击”按钮,使其首先注册:

$('#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
这过去很管用。但是现在,当没有
新的\u poter\u name\u字段时,
,提交按钮保持禁用状态。返回用于提交表单的
true
。现在,我必须显式地执行
$(“#新问题”)[0]。如果没有
诗人姓名字段
,则提交()


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

您应该绑定表单“提交”事件,并在希望有人注册而不是提交诗歌时使用prevent default/return false。这样就不需要禁用/启用按钮。

我不喜欢没有表单的想法。它是无效的,并且肯定不会遵循HTML的规范

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


你使用的代码太可怕了

  • 为什么??是否有多个提交按钮?下面的代码禁用页面上的每个提交按钮,也可以是其他形式

    $('#submit-poem').click ->
      $('input[type=submit]').attr('disabled', true) 
    
  • 这是检查提交真实性的错误方法,它可以很容易地用firebug之类的工具进行操作

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

  • 如果确定用户是否登录,那么您可以快速向服务页面发送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
              }
              //...
        });
    });
    

    不太相关,但你可能会有人用“回车”或其他键提交,而完全绕过你的点击。连接到表单的“提交”事件并返回false/true可能会更简洁。向我展示HTML,为什么在您提交表单时没有表单?我不太清楚。诗总是有一种形式的。我的意思是,有时会有一个“poter_name”字段(如果没有人登录)。@bevanb,检查是否有人登录,基于服务器中的会话,而不是JS。绑定到提交事件起作用,这就是我破坏它之前的情况!