1

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

为什么会这样以及如何防止它(我检查并返回错误运行)

来自 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;
      }
      }
  });
});
4

2 回答 2

4

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

$('#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;
});
于 2012-10-09T18:07:52.817 回答
1

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

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

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
       }
    });
});
于 2012-10-09T18:21:01.007 回答