【问题标题】:Accessing the parent html page from a div从 div 访问父 html 页面
【发布时间】:2012-05-31 17:33:27
【问题描述】:

我有一个简单的 HTML 页面,上面有一个隐藏字段。我显示了一个 DIV,其中有一个按钮供用户单击 - 当他们这样做时,我想更新主页上的隐藏字段。

目前,我的主 HTML 中有这个(在 CGI 文件中):

print "<td><input type=\"hidden\" id=\"mailUpdate\"></td></tr>";

我有这个(在 div 中的一个按钮的 onClick 访问的 javascript 模块中):

var updMail = document.getElementById("mailUpdate");
updMail.value = 1;

但是当我尝试阅读这个(在与上面相同的 CGI 文件中)时:

formData = cgi.FieldStorage()
doUpd = formData.getvalue("mailUpdate")
if (doUpd == 1):
    print "Maint button - doing update"

'doUpd' 永远不会获得任何价值。

希望这是有道理的 - 有什么想法吗?

【问题讨论】:

  • 应该没关系,关闭输入标签即可。你可以在设置它的值之前测试 updMail 的 null 吗?您的代码看起来正确,但可能有问题。 Firefox 或 Chrome 开发人员工具的 Firebug 插件对于在这种情况下进行调试非常有用!
  • 尝试关闭输入标签 - 没有区别(但很好指出 - 总是忘记那个标签,谢谢)。

标签: javascript python html cgi


【解决方案1】:

您的问题在于表达式(doUpd == 1): 您正在将doUpd(一个字符串)与一个整数1 进行比较。这将始终是False。更改为 (doUpd == '1'): 应该可以解决您的问题。

另外,您需要将name 添加到输入中,以便它与表单一起出现。

print "<input type=\"hidden\" id=\"mailUpdate\" name=\"mailUpdate\"></td></tr>"

【讨论】:

  • 嗯,它好一点,因为我现在可以打印出 'doUpd' 但仍然没有得到值(= 无)。尝试将其分配给“1”,但仍然没有乐趣......
  • 我更新了我的答案以在输入标签中包含name。这应该修复 value=None。
【解决方案2】:

在不熟悉 CGI 的情况下,您似乎将服务器端代码与客户端事件混合在一起。更好地检查隐藏值是添加如下一行:

var updMail = document.getElementById("mailUpdate");
updMail.value = 1;
alert(document.getElementById("mailUpdate").value);

如果您没有在服务器端收到值,可能是因为您的输入字段未包含在 &lt;form&gt; 元素中,然后 http 消息需要是表单提交,而不是简单的导航调用。

或者试试这个来验证实际存在什么值:

formData = cgi.FieldStorage()
doUpd = formData.getvalue("mailUpdate")
print doUpd

【讨论】:

  • “警报”的好主意 - 这样做了,并且该字段正在正确更新,但这是在客户端的 javascript 中。当我回到服务器端时,它似乎已经丢失了(我已经尝试了“打印”并且什么也没显示 - 当我尝试将字符串连接到一个字符串时,它说不能用 noneType 连接字符串)。
  • 您提出的观点很好,输入字段不包含在
    中。但既然 JavaScript 正在验证这一切正常,那么肯定还有别的东西。也许您在
    的 action 属性上使用 GET 而不是 POST?默认为 GET,因此请确保指定 POST。由于它是一个隐藏字段,它可能不会遇到表单-GET。
猜你喜欢
  • 1970-01-01
  • 2020-12-21
  • 2016-10-17
  • 2011-07-08
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多