php:看不到Javascript提交的隐藏值


php : cannot see the hidden value submitted by Javascript

我很确定我在这里错过了一些简单的东西,但它让我发疯了!
这不是我在PHP中使用的第一个表单,而是第一次提交隐藏值。

当单击菜单项时,我想将页面提交给自己-设置一个简单的参数,因此php代码进行处理。

页面提交得很好,但是我设置的隐藏变量不能通过_GET、_POST或_REQUEST获得。它应该是_GET,因为这是我设置的方法

这里是代码,如果有人可以发现我错了…
paramCustom是我试图设置和工作的那个。

菜单是一系列div &主持人:

<a href="" onclick="activateMenu('option-xyz');">Option Xyz</a>

activateMenu javascript函数是:

function activateMenu(optionTaken)
{
    // Set the hidden variable
    document.getElementById('paramCustom').value = optionTaken;
    // Display it to confirm it is set correctly
    var tt = document.getElementById('paramCustom').value;
    console.log("paramCustom set to : " + tt);
    // Submit the form
    document.getElementById('linkSubmit').submit();
    return false;
}

表单是这样编码的:

<form method="get" action="showProducts.php" id="linkSubmit">
    <input type="hidden" id="paramCustom" name="paramCustom" />
    <input type="submit" tabindex="-1" style="display:none;" />
</form>

在同一页的php我试图吐出来,但他们都显示空白!!

echo "paramCustom get is : ".$_GET['paramCustom']."<br/>"; // This should work
echo "paramCustom request is : ".$_REQUEST['paramCustom']."<br/>";
echo "paramCustom post is : ".$_POST['paramCustom']."<br/>";

好的,问题是您实际上并没有阻止事件的触发。点击链接,函数被调用,表单提交但你并没有在onclick中停止事件。因此表单提交,但立即被重定向到取消表单提交的链接的href。当href为空时,默认返回到当前页面。

onclick添加到链接(使用内联属性)的方式就像将事件包装在闭包中。所以当onclick燃烧时,真正燃烧的更像是function(){ activateMenu('option-xyz'); }。你对activateMenu的调用返回false,但是它周围的闭包不是。您可以在activateMenu前面添加return,以使事件本身返回false并取消。修改链接如下:

<a href="" onclick="return activateMenu('option-xyz');">Option Xyz</a>

然后实际事件本身将返回false,而不仅仅是函数。

下面是一个简单的例子来说明发生了什么。

对HTML做一点改变,你可以通过Javascript设置内联事件,这是一种更好的方式:

<a id="xyz" href="#">Option Xyz</a>

这是为您的目的编辑的Javascript:

function activateMenu(optionTaken)
{
    var paramCustom = document.getElementById('paramCustom');
    // Set the hidden variable
    paramCustom.value = optionTaken;
    // Display it to confirm it is set correctly
    var tt = paramCustom.value;
    console.log("paramCustom set to : " + tt);
    // Submit the form
    document.getElementById('linkSubmit').submit();
    return false;
}
window.onload = (function() {
    document.getElementById('xyz').onclick = function() {
        activateMenu('option-xyz');
    };
});

在PHP中,如您所知,$_GET获取查询字符串的参数,$_POST获取POST数据,$_REQUEST是两个数组的concat。在这种情况下,您的方法是GET,因此可以通过_GET和_REQUEST检索值,_POST将不起作用。您的代码对我来说不起作用,可能是因为您在加载DOM之前定义了函数,因此触发事件时可能会抛出异常。

这不起作用,因为您没有分配值。PHP将无法识别null值的字段。

<input type="hidden" id="paramCustom" name="paramCustom" value="somevaluehere" />

[编辑]在我自己测试之后,这是因为onclick事件的行为不像你预期的那样。修复此问题的最简单方法是为您的链接使用HREF。无论如何,仅仅依赖onclick事件实际上是不好的做法。

<a href="javascript:activateMenu('option-xyz');">Option Xyz</a>

onclick的正确用法如下:

<a href="" onclick="activateMenu('option-xyz');return false;">Option Xyz</a>

我最近一直在使用JQuery,它可能值得一试。

下载最新的JQuery脚本并链接到你的页面。

function activateMenu(optionTaken)
{
    // Set the hidden variable
    $("#paramCustom").val() = optionTaken;
    // Display it to confirm it is set correctly
    var tt = $("#paramCustom").val();
    console.log("paramCustom set to : " + tt);
    // Submit the form
    document.getElementById('linkSubmit').submit();
    return false;
}

这与你之前的没有太大的不同,但也许JQuery会做一个更好的工作来分配值给你的隐藏字段…

欢呼,K