【问题标题】:Deletion won't halt even though 'return false' runs即使 'return false' 运行,删除也不会停止
【发布时间】:2012-09-30 03:00:29
【问题描述】:

我已经在我的应用程序中实现了从数据库中删除用户的功能。用户选择用户(复选框)并单击提交。将显示一个确认框,询问用户是否要删除 用户名。一切正常,但如果单击取消,用户仍会被删除。

为什么会这样以及如何防止它(我已经检查并 return false 运行)

来自 usercontroller.php:

if ($userView->TriedToRemoveUser()) {
  $userIds = $userView->GetUsersToRemove();

  if ($userIds != 0) {
    $removeTry = $userHandler->RemoveUser($userIds);

    if ($removeTry) {
      $xhtml = \View\UserView::USER_REMOVED;
    }
    else {
      $xhtml = \View\UserView::FAILED_TO_REMOVE_USER;
    }
  }
}

来自 userview.php:

public function TriedToRemoveUser() {
  if (isset($_POST[$this->_submitRemove])) {
    return true;        
      }
      else {
        return false;
      }
}

来自 js.file:

$('#form3').submit(function() {
  $('input[type=checkbox]').each(function () {
    if( this.checked ) {
      var username = $(this).attr('user');

      var confirmBox = confirm('Do you really want to remove the user ' + username + ' ?');

      if (!confirmBox) {
        return false;
      }
      }
  });
});

【问题讨论】:

  • 您的意思是即使return false; 在javascript 中运行仍然发出请求,还是即使$userView->TriedToRemoveUser() 返回false,PHP 代码仍然执行?
  • 我的意思是即使返回false,仍然会发出提交请求。但是,Kevin B 下面的回答解决了这个问题!

标签: php jquery forms submit confirm


【解决方案1】:

(警告:所有代码都在我的脑海中,并且没有经过适当的测试)

假设您正在谈论 javascript 中的 return false; 语句:

return false; 不会阻止提交方法,因为它只是从.each() 方法中断。所有这一切都会停止对复选框的迭代。

尝试类似:

$('#form3').submit(function () {
    var doDelete = true;

    $('input[type=checkbox]').each(function () {
       // ...

       if (!confirmBox) {
           doDelete = false;
           return false; // Deletion has been cancelled so there is no need to continue the iteration
       }
    });

    if (!doDelete) {
        return false;
    }
});

如果用户取消任何选定的用户,这将阻止提交整个表单。如果您打算继续提交任何已确认的用户,您可以尝试以下操作:

$('#form3').submit(function () {
    $('input[type=checkbox]').each(function () {
       // ...

       if (!confirmBox) {
           $(this).attr('checked', false); //Uncheck this box so that it isn't submitted
       }
    });
});

【讨论】:

  • 非常感谢。最后一个正是我所追求的,而且效果很好。
【解决方案2】:

.each() 返回false 不会停止提交,将该值存储在变量中并返回该变量。

$('#form3').submit(function() {
    var submit = true;
    $('input[type=checkbox]').each(function () {
        if( this.checked ) {
            var username = $(this).attr('user');

            var confirmBox = confirm('Do you really want to remove the user ' + username + ' ?');

            if (!confirmBox) {
                submit = false;
                return false;
            }
        }
    });
    return submit;
});

【讨论】:

  • 另一种方法是使用 for 或 while 循环,这将允许您删除附加变量并简单地返回 false。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2023-04-08
相关资源
最近更新 更多