我已经实现了在我的应用程序中从数据库中删除用户的功能。用户选择用户(复选框)并单击提交。将显示一个确认框,询问用户是否要删除用户名。一切正常,除非点击取消,用户仍然被删除。
为什么会这样,我怎么能阻止它(我检查并返回错误运行)
来自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;
}
}
});
});
答案 0 :(得分: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;
});
答案 1 :(得分: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
}
});
});