0

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

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

$('#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,提交按钮保持禁用状态。Returningtrue用于提交表单。现在,$('#new_question')[0].submit()如果没有poet_name_field.

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

4

2 回答 2

1

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

于 2012-08-29T20:22:28.060 回答
0

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

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


您使用的代码很糟糕

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

    $('#submit-poem').click ->
      $('input[type=submit]').attr('disabled', true) 
    
  2. 这是检查提交真实性的错误方法,它可以很容易地使用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
          }
          //...
    });
});
于 2012-08-29T20:25:33.313 回答