我创建了一个带动态创建复选框的表单。我已经使用了一个j查询脚本,它将检查天气用户是否至少检查了一个复选框。如果不是,那么它将提醒错误信息。
HTML代码
print "<form action=\"dpt_multi_delete.php\" method=\"POST\" name=\"searchform\" >\n";
print "<td><input type=\"checkbox\" name=\"dptid$i\" value=\"$row[dpt_id]\"></td>\n";
print "<input type=\"submit\" name=\"submit\" value=\"DELETE SELECTED\" onclick=\"Validate()\"/>\n";
java脚本是:
function Validate() {
var form = document.forms[0]
var counter=0;
for (i = 0; i < form.elements.length ; i++) {
if (form.elements[i].type == "checkbox"){
if(form.elements[i].checked == true){
counter++
}
}
}
if (counter == 0){
alert("You have not selected an item to delete");
return false;
}
else{
alert("Are you sure you want to delete "+counter+" records");
}
}
问题1: 我面临的问题是,如果没有选择任何复选框用户,那么他将收到错误警报。单击确定或取消后,它将重定向到dpt_multi_delete.php页面。即使我在警报后使用“返回假”但它不起作用。
问题2: 如果用户选择了多个复选框,那么我将提醒警告,然后如果用户单击确定,则它将删除该记录。但在取消该警报信息后,所有这些都是删除记录。
对此的称呼是什么? ?我哪里错了?答案 0 :(得分:5)
如果要从事件处理函数返回false,则需要从事件处理程序本身执行此操作,而不仅仅是它调用的另一个函数。
您的onclick函数没有return语句。它调用Validate
,然后对函数返回的值不执行任何操作。
onclick="return Validate();"
Convention保留以构造函数的大写字母开头的变量名。请调用您的函数validate
,而不是Validate
。
在提交表单时,而不是在单击特定的提交按钮时,通常更好的方法是处理此类测试。
现代JavaScript不使用onclick
/ onsubmit
/ etc属性。我们改用addEventListener
。
function validate(event) {
// Your logic
if (someCondition) {
// Stop
event.preventDefault();
}
}
document.querySelector("form").addEventListener('submit', validate);
答案 1 :(得分:0)
试试这段代码:
将类添加到复选框
print "<td><input type=\"checkbox\" class="mycheckbox" name=\"dptid$i\" value=\"$row[dpt_id]\"></td>\n";
jQuery函数:
function Validate() {
var counter=0;
$( ".mycheckbox" ).each(function() {
if($(this).is(':checked'))
{
counter++
}
});
if (counter == 0)
{
alert("You have not selected an item to delete");
return false;
}
else
{
alert("Are you sure you want to delete "+counter+" records");
}
}