如果需要,显示字段

时间:2017-09-26 09:23:50

标签: javascript php css html5

我试图在php中创建一个联系表单。你可以找到它here

我尝试使用datepicker的文本框不可见,直到访问者检查了radiobutton" ja",然后它才需要可见。

以下是表单的代码:



var FormStuff = {

  init: function() {
    this.applyConditionalRequired();
    this.bindUIActions();
  },

  bindUIActions: function() {
    $("input[type='radio'], input[type='checkbox']").on("change", this.applyConditionalRequired);
  },

  applyConditionalRequired: function() {

    $(".require-if-active").each(function() {
      var el = $(this);
      if ($(el.data("require-pair")).is(":checked")) {
        el.prop("required", true);
      } else {
        el.prop("required", false);
      }
    });

  }

};

FormStuff.init();

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<form method="post" action="mail.php">
  <!--< ?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>-->
  <table id="contactForm">
    <tr>
      <th colspan="2">Contact</th>
    </tr>
    <div>
      <tr>
        <td><label>Reservatie: </label></td>
        <td>
          <table>
            <tr>
              <td id="nospacing"><input type="radio" name="reservatie" value="Ja" id="ja"></td>
              <td id="nospacing"><label for="reservatie">Ja</label></td>
              <td id="nospacing"><input type="radio" name="reservatie" value="Nee" id="nee"></td>
              <td id="nospacing"><label for="reservatie">Nee</label></td>
            </tr>
          </table>
        </td>

      </tr>
      <div class="reveal-if-active">
        <tr>
          <td><label for="reservering">Reserveringsdatum: </label></td>
          <td><input type="text" id="reservering" autocomplete="off" name="reservering" class="require-if-active" data-require-pair="#ja"></td>
        </tr>
      </div>
    </div>
    <tr>
      <td><input type="submit" name="submit" value="Verzenden" /></td>
      <td><input type="reset" value="Formulier wissen" class="alt" /></td>
    </tr>
  </table>
</form>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:0)

首先,你的标记有点混乱:

你不应该将 div 标签与 tr 混合,只有 tr 标签应该存在于<的嵌套的同一“级别” strong>表格标记

其次,回答你的实际问题 - 在单选按钮上添加点击事件监听器,这样当点击“是”时,你可以看到你的“揭示 - 如果活动”行:

var inputToHide = document.getElementsByClassName("reveal-if-active")[0];
var jaInput = document.getElementById("ja");
var neeInput = document.getElementById("nee");

function makeInputVisibleAgain() {
    inputToHide.style.display = "block";
}

function hideInput() {
    inputToHide.style.display = "none";
}

jaInput.addEventListener("click", makeInputVisibleAgain);
neeInput.addEventListener("click", hideInput);

第三 - 不要使用多个具有相同名称的ID,最好将 id =“nospacing”更改为类

答案 1 :(得分:0)

您使用$('input[type="radio"]').click(function(){})检测输入更改,请参阅代码段。

var FormStuff = {

  init: function() {
    this.applyConditionalRequired();
    this.bindUIActions();
  },

  bindUIActions: function() {
    $("input[type='radio'], input[type='checkbox']").on("change", this.applyConditionalRequired);
  },

  applyConditionalRequired: function() {

    $(".require-if-active").each(function() {
      var el = $(this);
      if ($(el.data("require-pair")).is(":checked")) {
        el.prop("required", true);
      } else {
        el.prop("required", false);
      }
    });

  }

};

FormStuff.init();
 /* this is the function to handle you need */
$(function(){
  $('input[type="radio"]').click(function(){
    if ($('input[type="radio"]#ja').is(':checked'))
    {
      $(".reveal-if-active").show();
    }
    else if('input[type="radio"]#nee'){
     $(".reveal-if-active").hide();
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<form method="post" action="mail.php">
  <!--< ?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>-->
  <table id="contactForm">
    <tr>
      <th colspan="2">Contact</th>
    </tr>
    <div>
      <tr>
        <td><label>Reservatie: </label></td>
        <td>
          <table>
            <tr>
              <td id="nospacing"><input type="radio" name="reservatie" value="Ja" id="ja"></td>
              <td id="nospacing"><label for="reservatie">Ja</label></td>
              <td id="nospacing"><input type="radio" name="reservatie" value="Nee" id="nee"></td>
              <td id="nospacing"><label for="reservatie">Nee</label></td>
            </tr>
          </table>
        </td>

      </tr>
      <div >
        <!-- make the tr the element to hide and show -->
        <tr class="reveal-if-active" style="display:none">
          <td  ><label for="reservering">Reserveringsdatum: </label></td>
          <td><input type="text" id="reservering"  autocomplete="off" name="reservering" class="require-if-active" data-require-pair="#ja"></td>
        </tr>
      </div>
    </div>
    <tr>
      <td><input type="submit" name="submit" value="Verzenden" /></td>
      <td><input type="reset" value="Formulier wissen" class="alt" /></td>
    </tr>
  </table>
</form>

答案 2 :(得分:0)

你可能想要这样的东西吗?请注意,只需很少的代码就可以轻松完成。由于您是初学者,我将解释:

$( ... );是jQuery的说法&#34;当页面完全加载时,开始执行内部&#34;。如果你不知道,没有这个,脚本会随时开始执行,并可能导致错误,主要是因为没有找到你使用的元素。

$('input[name="reservatie"]').change(function(){ ... });:单选按钮的名称为&#34; reserveatie&#34;,因此当它们被更改时,它将执行change()内的功能。

$('#reveal').prop('hidden', !$('#ja').prop('checked'));:我确定了日期选择器所在的表格行&#34;显示&#34;,因为,也许我错了,但把它的一行放在div中没有让我的代码顺利,所以我认为这是错的。我删除了div并改为使用了行。因此,它的属性hidden将与&#34; ja&#34;的checked属性相反,这意味着,如果&#34; ja&#34;如果选中,则日期选择器不会被隐藏,如果没有,则会被隐藏。

希望它对你有所帮助。

&#13;
&#13;
$(function(){
  $('input[name="reservatie"]').change(function(){
    $('#reveal').prop('hidden', !$('#ja').prop('checked'));
  });
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<form method="post" action="mail.php">
  <!--< ?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>-->
  <table id="contactForm">
    <tr>
      <th colspan="2">Contact</th>
    </tr>
    <div>
      <tr>
        <td><label>Reservatie: </label></td>
        <td>
          <table>
            <tr>
              <td id="nospacing"><input type="radio" name="reservatie" value="Ja" id="ja"></td>
              <td id="nospacing"><label for="reservatie">Ja</label></td>
              <td id="nospacing"><input type="radio" name="reservatie" value="Nee" id="nee"></td>
              <td id="nospacing"><label for="reservatie">Nee</label></td>
            </tr>
          </table>
        </td>

      </tr>
        <tr id="reveal" hidden>
          <td><label for="reservering">Reserveringsdatum: </label></td>
          <td><input type="text" id="reservering" autocomplete="off" name="reservering" class="require-if-active" data-require-pair="#ja"></td>
        </tr>
      </div>
    <tr>
      <td><input type="submit" name="submit" value="Verzenden" /></td>
      <td><input type="reset" value="Formulier wissen" class="alt" /></td>
    </tr>
  </table>
</form>
&#13;
&#13;
&#13;