0

我很确定我在这里遗漏了一些简单的东西,但这让我发疯了!
这不是我在 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/>";
4

4 回答 4

0

这不起作用,因为您尚未分配值。PHP 不会识别具有空值的字段。

<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>

这也有效。

于 2013-06-14T18:05:21.067 回答
0

对 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获取查询字符串、$_POSTPOST 数据的参数,并且$_REQUEST是两个数组的连接。在这种情况下,您的方法是 GET,因此可以通过 _GET 和 _REQUEST 检索值,_POST 不起作用。您的代码对我不起作用,可能是因为您在加载 DOM 之前定义了您的函数,因此该事件在触发时可能会引发异常。

于 2013-06-14T18:06:20.040 回答
0

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

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

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

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

这是一个简单的例子来说明正在发生的事情。

于 2013-06-14T20:00:28.597 回答
-2

我最近一直在使用 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 会更好地将值分配给您的隐藏字段......

干杯,

ķ

于 2013-06-14T18:06:22.527 回答