return false不起作用

时间:2015-06-18 09:35:18

标签: javascript php jquery

我创建了一个带动态创建复选框的表单。我已经使用了一个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: 如果用户选择了多个复选框,那么我将提醒警告,然后如果用户单击确定,则它将删除该记录。但在取消该警报信息后,所有这些都是删除记录。

对此的称呼是什么? ?我哪里错了?

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");
  }
}