【问题标题】:send html select option disabled attribute with POST and enabled select option attribute with onclick in input form使用 POST 发送 html 选择选项禁用属性,并在输入表单中使用 onclick 启用选择选项属性
【发布时间】:2021-05-10 15:47:27
【问题描述】:

您好,我想通过 POST 发送 html 选择选项禁用属性,并在输入表单中通过 onclick 启用选择选项属性。 例如我有:

<script>
function checked(){
     var sel = document.getElementById("table A");  
    if(sel.options[sel.selectedIndex].text=='AAAA'){
         document.getElementById('table B').disabled = false;
    }
}

</script>


<?php
        print("<form method=\"POST\">");
        <print("<tr><th>Table A</th><td>
        <select id='table A' name='table1'>
                <option value=' '>Select</option>
                <option name='AAAA' value='A' onclick=\"checked()\">AAAA</option>
                <option name='BBBB' value='B'>BBBB</option>
        </select></td></tr>");
     print("<tr><th>Table B</th><td>
        <select id='table B' name='table2' disabled>
                <option value=' '>Select</option>
                <option name='BBB' value='B'>BBBB</option>
                <option name='CCC' value='C'>CCCC</option>
                </select></td></tr>");
        print("<tr><td><input type=\"submit\" id=\"save\" name=\"save\" value=\"Save\" ></td></tr>");

if(isset($_POST['save'])){
if(document.getElementById("table B").disabled){
            return ' ';
            }else{
                $type_modify=$_POST['table B'];
                }
?>

现在,如果我不禁用选择表单表 B,我想用 post ' ' 发送。如果我单击选择选项名称='AAAA',我希望使用 id='table B' 启用选择。我的代码不起作用。为什么?

【问题讨论】:

  • select 上尝试onchange 而不是option 上的onclick,对于初学者。这回答了你的问题了吗? Is there an onSelect event or equivalent for HTML <select>?
  • 另外,if(isset($_POST['save'])){ if(document.getElementById("table B").disabled){ 你在这里混合了 PHP 和 Javascript。 PHP 无法访问 DOM。
  • 哦,不。我不能混合 PHP 和 Javascript。我该怎么做?我可以仅使用 php 来启用输入表单吗?
  • 您不能将 JS 语法、函数(如 getElementById)或对象(如 document)解析为 PHP 并期望它们能够正常工作。否则,你当然可以用 PHP 生成 JS。假设您的错误报告已打开,您应该会收到上述错误。你需要做的是例如有一个 onsubmit javascript,其中包含其他数据,否则不会在您的表单中提交。
  • $type_modify 是如何使用的? PHP 的其余部分应该只是 HTML。您还应该坚持使用一种封装方法,属性的双引号或单引号,不过这是个人喜好。

标签: javascript php


【解决方案1】:

你可以这样做。

例如

<script>

function processForm(e) {
    if (e.preventDefault) e.preventDefault();

    var input = document.createElement('input');
    input.type = 'hidden';
    input.name = "my-disabled-check-input";
    input.value = document.getElementById('table B').disabled;
    this.appendChild(input);

    this.submit();
}

var form = document.getElementById('my-form');
if (form.attachEvent) {
    form.attachEvent("submit", processForm);
} else {
    form.addEventListener("submit", processForm);
}
</script>

您也可以在没有相同事件侦听器的情况下添加另一个 onclick 函数,然后使用 form.submit(); 提交表单;

然后在您的 PHP 文件中将其视为普通的 POST 变量。 如果我们像我设置的那样做,你会想看看$_POST['my-disabled-check-input'];

在您的表单 html 中,您可以设置 POST URL。这个 URL 可以是显示表单的页面,也可以接收 POST 变量。如果您不熟悉这些术语,请查看https://www.w3schools.com/html/html_forms.asp

但基本上你可以设置一个“动作”,它只是 php 文件的 URL。

所以直接取自 W3schools 的表格如下所示。

<form action="/action_page.php">
  <label for="fname">First name:</label><br>
  <input type="text" id="fname" name="fname" value="John"><br>
  <label for="lname">Last name:</label><br>
  <input type="text" id="lname" name="lname" value="Doe"><br><br>
  <input type="submit" value="Submit">
</form>

如果想要一个 PHP 文件来显示表单并获取 $_POST 变量,我们可以这样做。

<?php
if($_POST) {
 echo "Post Variables sent";
 var_dump($_POST);
} else {
 echo "Where I will put my form HTML and JS.";
}
?>

您的 PHP 也可以像这样使用,以便更轻松地编写 HTML。

<?php if($_POST): ?>
    Your name is <?=$_POST['fname']?> <?=$_POST['lname']?>.
<?php else: ?>
    <form action="/action_page.php">
      <label for="fname">First name:</label><br>
      <input type="text" id="fname" name="fname" value="John"><br>
      <label for="lname">Last name:</label><br>
      <input type="text" id="lname" name="lname" value="Doe"><br><br>
      <input type="submit" value="Submit">
    </form>
<?php endif; ?>

这个&lt;?=$_POST['fname']?&gt; 等同于&lt;?php echo $_POST['fname']; ?&gt;,但更短一些,我喜欢在我的 HTML 视图中这样使用它。

此脚本不考虑任何用户输入解析,因此请记住这一点。您可能还想查看 HTML 5 表单验证,以确保输入只是您期望的信息以及 PHP 过滤用户输入。

【讨论】:

  • 所以我不能在同一个页面中混合使用表单标签和方法发布的 php 和 js。例如,我可以在一页中编写 js,在另一页中编写 php 表单。对吗?
  • 可以,但您需要一个 if 语句来检测是否设置了 $_POST 变量,让您知道应该提交到数据库。
  • 你能举个例子吗?我是初学者,我了解 php 和 javascript。
  • 我更新了它,以便您更好地了解它的工作原理。
猜你喜欢
  • 2013-01-12
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
相关资源
最近更新 更多