当JavaScript指示隐藏控件具有值时,HTML表单提交空字符串

时间:2016-01-28 11:04:19

标签: html forms submit

在许多其他控件中,我在表单上有以下HTML元素

<input ID='cmdRegisterMe' name='cmdRegisterMe' value='Register Me' onclick="return preSubmit();"  type='submit'  />
<input type="hidden" ID="NewHash" name="NewHash" value="">
<INPUT TYPE="TEXT" ID="email" NAME="email" VALUE="" SIZE="50" MAXLENGTH="50">
<INPUT TYPE="PASSWORD" ID="password1" NAME="password1" VALUE="" SIZE="30" MAXLENGTH="25">
<INPUT TYPE="PASSWORD" ID="password2" NAME="password2" VALUE="" SIZE="30" MAXLENGTH="25">

和JS函数

function preSubmit() {

  document.getElementById("NewHash").value = doNewHash(document.getElementById("password1").value, document.getElementById("email").value.toLowerCase());
alert(document.getElementById("NewHash").value);
  document.getElementById("password1").value = '';
  document.getElementById("password2").value = '';
  return true;
}

function doNewHash(pw, strUsername) {
  var hash_padding = '************';
  return SHA1(SHA1(pw) + hash_padding + strUsername);
}

当我点击提交时,我看到通过调用alert()显示预期的散列值。

但是,在我的PHP中,$ _POST ['NewHash']的值是一个空字符串。我无法理解为什么会发生这种情况。据我所知,onclick()函数返回true后没有执行其他代码。我已经对我的“NewHash”代码进行了全局搜索,并且没有其他任务。

如果我替换此行

  document.getElementById("password1").value = '';

用这个

  document.getElementById("password1").value = document.getElementById("NewHash").value;

并检查$ _POST ['password1'],它包含哈希值。究竟是怎样才能消除'NewHash'的价值?

1 个答案:

答案 0 :(得分:0)

我发现了什么问题,但我希望发布这个问题可能有助于其他人。我将PHP生成的HTML保存为文件,添加到顶部,并决定逐个删除代码并提交,直到提交的NewHash值不再为空。我发现我有两个名为NewHash的隐藏控件 - 所以JS在一个显示值,浏览器正在提交另一个!