0

嗨,我有一个页面,其中包含几种不同的表单,所有这些表单都在按下相应按钮时显示/隐藏。

现在它们都需要包含一些由 php 从数据库中检索到的字段,但问题是我的 jquery 代码无法隐藏稍后声明的字段。

这是我的代码示例:

<form action="controlPanel.php" method="post">
    <input class="inputFields" type="text" name="fileName" />
    <input class="inputFields" type="text" name="fname" />
    <select class="styled-select" id="nameDropdown" name='nameDropdown'>
    <option value="0"><span class="formatFreeTxt">Choose a name</span></option>
    <?php
        foreach ($GLOBALS['myDB']->getList('2') as $i) {
            echo "<option value='" . $i['email'] . "'>" . $i['fname'] . " " . $i['lname'] . "</option>";
         }
    ?>
    </select>
    <input class="inputFields" type="submit" name="textForm" />
</form>

然后我在上面的 div 上有另一个表格。像那样:

<form action="controlPanel.php" method="post">
    <input class="inputFields" type="text" name="textName" />
    <input class="inputFields" type="text" name="lname" />
    <select class="styled-select" id="nameDropdown" name='nameDropdown'>
    <option value="0"><span class="formatFreeTxt">Choose a name</span></option>
    <?php
        foreach ($GLOBALS['myDB']->getList('2') as $i) {
            echo "<option value='" . $i['email'] . "'>" . $i['fname'] . " " . $i['lname'] . "</option>";
         }
    ?>
    </select>
    <input class="inputFields" type="submit" name="nextTxtForm" />
</form>

我的 JQuery 代码是:

function showHideBenef()
 {
       if($('#nameDropdown').is(':visible'))
       {
          $('#nameDropdown').fadeOut();
          $('#nameTable').fadeIn();
          $('#toggleButton').attr('value', 'Choose from existing ones');
          $('#chooseTxt').html('New Beneficiary Form');

       }
       else
       {
           $('#nameDropdown').fadeIn();
           $('#nameTable').fadeOut();
           $('#toggleButton').attr('value', 'OR Add a new one');
       }

  }

有什么方法可以在不更改每个字段名称的情况下完成这项工作,这样我就可以实际捕获不同的帖子而无需检查所有不同的字段名称?

4

6 回答 6

1

这里的问题是您有多个具有相同 ID 和名称的输入元素,这不好。

为什么不将它们作为数组?

所以 form1 中的元素将是

<input type="text" name="firstform[fname]" id="firstform_fname"/>

form2 中的元素是

<input type="text" name="secondform[fname]" id="secondform_fname"/>

在 php 脚本中,您可以从 $_POST['firstform'] 和 $_POST['secondform'] 获取表单的值

于 2012-08-04T14:31:15.303 回答
1

去掉所有重复的id属性值,然后就可以使用name属性值了:

function showHideBenef () {

  var nameDropdown = $( '[name="nameDropdown"]' );

  if ( nameDropdown.is( ':visible' ) ) {

    nameDropdown.fadeOut();

    // Not sure what the following elements are, might need to use
    // `name` attr or classes to select them.

    $( '#nameTable' ).fadeIn();

    $( '#toggleButton' ).attr( 'value', 'Choose from existing ones' );

    $( '#chooseTxt' ).html('New Beneficiary Form');

  }


  else {

    nameDropdown.fadeIn();

    $( '#nameTable' ).fadeOut();

    $( '#toggleButton' ).attr( 'value', 'OR Add a new one' );

  }

}
// showHideBenef
于 2012-08-04T15:04:18.963 回答
0

只需给每个表单一个唯一的 id 属性。

于 2012-08-04T14:26:29.573 回答
0

我认为设置 id 属性

像这样

<form action="controlPanel.php" method="post"  id="form1">

或者

<form action="controlPanel.php" method="post" id="form2">
于 2012-08-04T14:29:21.793 回答
0

您可以给每个输入一个 ID 属性,并使用 jQuery 根据 ID 隐藏/显示。

对 ID 使用前缀,以便区分输入,例如 id="textFormFileName" 和 id="nextTxtFormFileName"

于 2012-08-04T14:32:52.230 回答
0

好的,它可能不是最佳解决方案,但我最终将所有内容包装在一个 div 元素中,然后我使用 JQuery 隐藏整个 div ...这样我就可以保持不同形式的重复名称,只要你给divs一个不同的id..

谢谢大家的答案!

于 2012-08-04T16:01:01.850 回答