【问题标题】:PHP_SELF & Javascript setAttributePHP_SELF & Javascript setAttribute
【发布时间】:2014-01-27 11:13:29
【问题描述】:

我在 PHP 中有以下代码:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <?php $value = $_POST['Field1'] ?>
    <input type="text" id="Field1" name="Field1" value="<?php echo $value ?>">
    <input type="button" value="ButtonValue" onclick="SubmitFunction()">
</form>

还有一些 JavaScript 函数:

<script>
    function SubmitFunction(){
        //... do some stuff here
        //But here I need to assign value to Field1:
        document.getElementById("Field1").setAttribute("value", "Some value");
        document.form.submit();
    }
</script>

当这段代码第一次加载时,它说有未定义的索引 Field1。完全正确。

但是当我使用 SubmitFunction() 为该字段设置属性值时,页面重新加载并且仍然找不到 Field1 !这是我的问题。

我注意到在纯 HTML 代码中,初始表单如下所示:

<form>
    <input type="text" id="Field1" name="Field1" value>
    <input type="button" value="ButtonValue" onclick="SubmitFunction()">
</form>

我的问题在哪里(除了大脑)?

【问题讨论】:

  • 你的浏览器是什么我在FF26中测试它工作
  • 我的是 Google Chrome 32
  • AAAAHm...对不起,我很烂。在我最后一个无用的答案(我删除它)中,我告诉你如何防止提交。但是你需要开火……我的错。但是...我已在本地粘贴您的代码,它工作正常。提交表单只有一件事我需要在document.forms[0].submit(); 中更改您的document.form.submit();,但是当页面重新加载时,我发现“某些值”之类的值。
  • 是的,它是这样工作的。但是我发现了另一个问题。 setAttribute("value", "Some value") 设置通过 AJAX 回调函数获取的值。它只是返回这个值。而已。如果在我的项目中我只是提交表单而不填写此值,它会按预期工作。但是,如果我通过 setAttribute 设置值 - 会失败。好吧,我可能需要检查我的代码并找出这种不当行为。

标签: javascript php setattribute


【解决方案1】:
 <script>
        function SubmitFunction(){
            //... do some stuff here
            //But here I need to assign value to Field1:
        document.getElementById("Field1").setAttribute("value", "Some value");
        document.form.submit(document.getElementById("Field1").getAttribute("value"));
        }
    </script>

    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <?php $value = $_POST['Field1'] ?>
        <input type="text" id="Field1" name="Field1" value="<?php echo $value?$value:''; ?>">
        <input type="button" value="ButtonValue" onclick="SubmitFunction()">
    </form>

【讨论】:

  • document.form.submit(document.getElementById("Field1").getAttribute("value"));如果我需要提交的字段很多怎么办?我应该这样处理它们吗?
  • 有一个名为 serialize() 的 jquery 函数,它将返回表单的所有元素。您只需使用该功能并将序列化数据发送到服务器