如何在php中实现“show sub-checkbox”?

时间:2015-11-04 23:28:12

标签: javascript php jquery checkbox

我正在使用面向对象的php或prep语句从数据库绑定所有医学测试列表,我的问题是如何在php中实现show subcheckbox?如果单击实验室的复选框,则会显示所有子复选框?我认为javascript不起作用

这里是医学测试复选框的PHP代码

int wertarray2 = Convert.ToInt16(wertarray1[0]);

以下是子复选框的代码

  <?php
    $tsql = "select medTestName from medtest";
    $tstmt = $con->prepare($tsql);
    $tstmt->execute();
    $tstmt->bind_result($mtn);
    $tstmt->store_result();

    while ($tstmt->fetch()){
    $d1= '<input type="checkbox" name="test[]"
     value="'.$mtn.'">'.$mtn.'<br>';
    echo $d1;
    }       

    ?>

这是我的医学测试的样子

enter image description here

这是我的医学测试数据库

enter image description here

对不起,很长的帖子,我真的不知道该怎么做:(

2 个答案:

答案 0 :(得分:1)

这是你的想法吗?

我创建了两个PHP数组:一个包含所有测试,另一个包含所有主题。首先,我们遍历测试数组并打印出每个项目。在每次迭代中,我们遍历主题并打印出每个项目(确保每个元素都有一个唯一的ID)。

生成HTML后,我们使用jQuery隐藏包含每个测试主题的字段集。然后,我们为每个测试复选框附加一个单击处理程序,隐藏或显示嵌套主题。

显然,您的$ tests数组将由您的数据库查询结果填充,正如您的原始代码所示。为了演示目的,我已经对我进行了硬编码。

<!DOCTYPE html>
<html>
  <head>
    <title>Medical Stuff</title>
  </head>
  <body>
    <h1>Medical Stuff</h1>

    <?php
      $tests = array(
        "Vital Signs",
        "Neuro-Psychological",
        "Laboratory",
        "Radiology",
        "Ultrasound",
        "Audiometry",
        "Optometry",
        "ECG",
        "Treadmill",
        "Dental",
        "Physical Examination",
        "Pediatrics",
        "MRI"
      );
      $topics = array(
        "Complete Blood Count",
        "Blood Typing",
        "Urinalysis",
        "RPR/TPHA",
        "Hepatitis B screening",
        "Fasting Blood Sugar",
        "Creatinine",
        "Total Cholesterol(Low Cholesterol, High Cholesterol)",
        "Triglyceride",
        "VLDL",
        "Blood Uric Acid",
        "Anti-HAV Igm Screening",
        "Anti HBaAg",
        "Drug & Alcohol Test",
        "Stool Culture"
      );
      $tests_length = count($tests);
      $topics_length = count($topics);
    ?>

    <form>
      <fieldset>
        <legend>Tests</legend>

        <?php
          // Tests
          for ($i = 0; $i < $tests_length; $i++) {

            $test_value = $i + 1;
            $test_id = "test_" . $test_value;

            print '<div>';
            print '<input type="checkbox" class="test" id="' . $test_id . '" value="' . $test_value . '">';
            print '<label for="' . $test_id . '">' . $tests[$i] . '</label>';

            // Nested topics
            print '<fieldset class="topics">';

            for ($ii = 0; $ii < $topics_length; $ii++) {

              $topic_value = $ii + 1;
              $topic_id = $test_id . "_topic_" . $topic_value;

              print '<div>';
              print '<input type="checkbox" class="topic" id="' . $topic_id . '" value="' . $topic_value . '">';
              print '<label for="' . $topic_id . '">' . $topics[$ii] . '</label>';
              print '</div>';
            }

            print '</fieldset>';
            print '</div>';
          }
        ?>

      </fieldset>

      <input type="submit" value="Submit">
    </form>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script>
      jQuery(document).ready(function($){

        $(".topics").hide();

        $(".test").on('click', function(e){
          var topics = $(this).nextAll('.topics');

          if ($(this).is(':checked')) {
            topics.show();
          } else {
            topics.hide();
          }
        });

      });
    </script>
  </body>
</html>

上面的代码最终看起来像这样:

enter image description here

答案 1 :(得分:1)

在我看来,最简单的方法是预加载所有复选框,隐藏它们,然后根据需要用一些javascript显示它们。

我将告诉您如何使用某些javascript。

以下是javascript和随附的html的基本概念;

HTML

<label><input type="checkbox" name="laboratory-test" value="1">Laboratory</label>
<!-- Container for the set of sub checkboxes, hidden on load -->
<div id="laboratory-toggle" style="display:none;">
    <label><input type="checkbox" name="topic" value="1">Complete Blood Count</label>
    <label><input type="checkbox" name="topic" value="2">Blood Typing</label>
    <label><input type="checkbox" name="topic" value="3">Urinalysis</label>
    <label><input type="checkbox" name="topic" value="4">RPR/TPHA</label>
    <label><input type="checkbox" name="topic" value="5">Hepatitis B screening</label>
    <label><input type="checkbox" name="topic" value="6">Fasting Blood Sugar</label>
    <label><input type="checkbox" name="topic" value="7">Creatinine</label>
    <label><input type="checkbox" name="topic" value="8">Total Cholesterol(Low Cholesterol, High Cholesterol)</label>
    <label><input type="checkbox" name="topic" value="9">Triglyceride</label>
    <label><input type="checkbox" name="topic" value="10">VLDL</label>
    <label><input type="checkbox" name="topic" value="11">Blood Uric Acid</label>
    <label><input type="checkbox" name="topic" value="12">Anti-HAV Igm Screening</label>
    <label><input type="checkbox" name="topic" value="13">Anti HBaAg</label>
    <label><input type="checkbox" name="topic" value="14">Drug &amp; Alcohol Test</label>
    <label><input type="checkbox" name="topic" value="15">Stool Culture</label>
</div>

的Javascript

//the checkbox that controls the hide/show
var controlbox = document.querySelector('input[name="laboratory-test"]');

//the container of the sub-checkboxes
var subboxes = document.querySelector('#laboratory-toggle');

// attach to the change event of the controlling checkbox
controlbox.addEventListener('change', function (e) {
    // if it is checked after the change
    if (this.checked) {
        // display the subboxes
        subboxes.style.display = 'block';
    } else {
        // if not checked hide the subboxes
        subboxes.style.display = 'none';
    }
});

一个工作示例的链接。 http://jsfiddle.net/oc9p3a2h/3/

如果需要,我很乐意进一步解释。如果这需要使用多组子复选框,很高兴向您展示它是如何工作的。

编辑:这是使用与MarkPlewis完全相同的技术,如果你需要一个关于如何生成我上面写的html的php,请告诉我。