如果用户未登录,如何停止提交HTML表单,但如果用户已登录则允许提交?

时间:2010-07-31 06:10:31

标签: php javascript jquery

在我的应用中,用户必须登录才能提交表单信息。

用户点击表单提交按钮后,我的jQuery会检查用户是否已登录。

如果未登录,则会弹出一条错误消息,请求登录/注册。 我现在可以成功停止默认操作(提交)。

但是,如果用户已经登录,我该如何允许默认操作? 使用我当前的代码,如果用户已登录,则也会阻止默认操作。

这是我的代码:

jQuery('.member-only').click(function(event) {
    var $element = jQuery(this);
    var SignedIn;

    jQuery.ajax({
        type: 'POST',
        url: '/ajax/member',
        dataType: 'json',
        success: function(data) {
            var $err = jQuery('<div></div>')
                        .addClass('member-check')
                        .html(data.msg)
                        .css('left', $element.position().left);
            SignedIn = data.SignedIn;

            if (!(data.SignedIn)) { // not signed in
                $element.after($err);
                $err.fadeIn('slow');
                return false;
            }
        }
    });

    jQuery('.member-check').live('click', function() {
        jQuery(this).fadeOut('slow', function() {jQuery(this).remove(); });
    });

    if (!SignedIn) {
        event.preventDefault();
        event.stopImmediatePropagation();
        return false; // block default submit
    }
});

感谢。

7 个答案:

答案 0 :(得分:2)

您需要让JS函数return false;阻止事件的默认操作。

但是,这不包括已禁用JS或能够欺骗它的用户。所以你应该在服务器端优雅地处理这个问题:)


更新:根据您的更新,请添加

alert(typeof Signedin);
alert(Signedin);

if(!Signedin)之前,告诉你两种情况的结果。它可能是错误的类型和/或值导致您总是进入if块,因此总是返回false。

例如,undefined类型始终会导致!Signedin评估true。您希望它始终为boolean类型,其值为truefalse

答案 1 :(得分:1)

这是一个Moo问题。你没有使用过的用户应该从未见过他首先无法提交的表格。

修复您的PHP,以便不写未登录用户无法提交的表单。

答案 2 :(得分:0)

查看是否有用户登录。为它保留一面旗帜。如果未设置标志,则禁用提交按钮。或者只在设置了flag时才使用jquery设置表单操作部分。

答案 3 :(得分:0)

在事件处理程序中使用event.preventDefault();。返回false仅在某些情况下有效(更多的是解决方法)。

http://api.jquery.com/event.preventDefault/

https://developer.mozilla.org/en/DOM/event.preventDefault

答案 4 :(得分:0)

$(form_id).submit(function(){ //triggered when user submits form
  var signed_in = check_if_user_is_signed_in(); //checking
  if(signed_in){ //singed in
    //Do stuff
    return true; //submit form
  } else{ //user not signed in
    //Do stuff
    return false; //prevent form from being submitted
  }
})

答案 5 :(得分:0)

如果您的网站经常在多个窗口中打开,我还会添加一个ajax请求来检查用户是否已登录。

答案 6 :(得分:0)

请查看我对您的代码的修改。让我知道返回的data.SignedIn;的数据类型。我添加了一个console.log将其返回给firebug。

我的示例对准备好的文档采取操作,而不是等待用户进行交互,从而防止向用户显示在后台发生异步调用的可用性问题(ajax spinner):

$(document).ready(function($){
    var memberStatus;
    jQuery.ajax({
        type: 'POST',
        url: '/ajax/member',
        dataType: 'json',
        success: function(data) {
console.log(data.SignedIn) //I need to know what format this is returned (Boolean: True/False?)
memberStatus = data.SignedIn;
        }
    });
   if (memberStatus) { //if true, that means they are a member
      //draw member box
   } else {
      $("#submitButtonID").attr('disabled',true);
   }
});