如何使用onclick在表单中发布变量

时间:2013-07-20 10:13:30

标签: php javascript

<form action='#' method='post' onclick=' ConfirmChoice(); 
return false;' style='display:inline-block;'>
<input type='hidden' name='delete_dish' value='" . $row['dishname'] . "'>
<input type='image' src='images/delete2.png' alt='Submit' name='delete2' value='delete2'>
</form>

每当我$_POST在另一个文件上时,它会显示Notice: Undefined index: delete_dish

但是,当我删除onclick=' ConfirmChoice(); return false;并将FILENAME.php代替#时,它就可以了。

2 个答案:

答案 0 :(得分:1)

您根本没有发出POST请求

根据您的一条评论(为了简洁起见确认消息已更改):

<script language="javascript"> 
    <!-- Confirm Dialog Box for deletion --> 
    function ConfirmChoice() { 
        answer = confirm("Are you sure?")
        if (answer !=0) { 
            location = "recipe7.php" 
        }
    } 
</script>

假设 location表示document.location:这将意味着如果用户点击表单中的任何内容,它会在问题中使用只会发生以下两件事之一:

  • 没有
  • 用户被重定向到recipe7.php

工作解决方案

<script language="javascript"> 
    function ConfirmChoice() { 
        return confirm("Are you sure?");
    }
</script>
<form action='recipe7.php' method='post' onsubmit='return ConfirmChoice();' >
    <input type='hidden' name='delete_dish' value='" . $row['dishname'] . "'>
    <input type='image' src='images/delete2.png' alt='Submit' name='delete2' value='delete2'>
</form>

两个不同之处是:

  • 将表单提交到应提交的位置
  • 使用onsubmit提示用户,而不是点击。

如果表单onsubmit回调返回falsey - 提交表单将被中止。

其他要点

javascript中的评论

具有以下形式:

// this is a comment
/* this is a 
multiline
comment */

在javascript块中使用html注释(<!-- asdf -->)无效。

默认情况下,无需js 即可使用

编写仅在不需要时启用js的功能 - 只会增加复杂性。而是让它在没有js的情况下工作 - 然后在之后添加你想要的任何js功能(最小值)。

坚持这一原则将有两个概念:

  • Js逻辑更简单(因为它更少)
  • 如果出现js错误,仍然有效

答案 1 :(得分:0)

变化

onclick=' ConfirmChoice(); return false;'

onclick='return ConfirmChoice();'

试试这个....

<form name='myform' action='recipe7.php' method='post' onclick=' ConfirmChoice(); 
return false;' style='display:inline-block;'>                
function ConfirmChoice()
{
  var r = confirm("Are you sure?");
  if(r == true)
  {
    document.myform.submit();
     return true;
  } 
  else
  {
     // do something
     return false;
  }
}