如何使用jquery从php变量中显示div

时间:2012-06-27 15:34:05

标签: php jquery checkbox doctrine

我正在填充foreach循环中的复选框列表,并为每个复选框提供一个ID。我在下面添加了一组div,具体取决于创建的复选框。我以为我可以将id变量加载到jQuery if语句中,然后使用.toggle来显示或隐藏相应的div。

<?php 
//Call Programs
$getPrograms = Doctrine::getTable('Program')->createQuery()->where('subsection=?', 'mfa')->orWhere('subsection=?', 'mps')->orWhere('subsection=?', 'mat')->orWhere('subsection=?', 'ma')->orderBy('title ASC')->execute(); ?>

    <div class="form_row">
     <label>
    <span><sup class="required_form_item">*</sup>Select Program</span>
    </label>
        <div class="buttonColumn" style="margin-left:170px;">
        //loop the records in with checkboxes
        <?php foreach ($getPrograms as $prog): ?>
              <?php 
              $subsection = $prog->getSubsection();
              $subsection = strtoupper($subsection);

              $trimProg = trim($prog->getTitle(), ' ');
              $removeChars = array(" ", "&");
              $trimProg = str_replace( $removeChars, '', $trimProg ); 
              $trimProg = preg_replace('/\s\s+/', '_', $trimProg);

              ?>
              //custin id matches record title
              <input type="checkbox" name="program" class="isChecked" id="<?php echo $trimProg; ?>" value="<?php echo $subsection . " " . $prog->getTitle() ?>" /><?php echo $subsection . " " . $prog->getTitle() ?><br />
        <?php endforeach ?>
        </div>
    </div> 

在选中匹配复选框之前,以下div将设置为display:none。

    <div class="form_row sessionTime" id="Program1" style="display:none;">
    Please choose an session time:
    <input type="checkbox" name="schedule" value="5:00 pm" />5:00 pm<br />
    </div>

    <div class="form_row sessionTime" id="program2" style="display:none;">
    Please choose an session time:
    <input type="checkbox" name="schedule" value="10:00 pm" />10:00 pm<br />
     </div>    
    ...

这就是我认为可行的......但是唉...它不是

$('.isChecked').click( function() {

    if ( $(this).is(':checked') ) {
      $thisID = $(this).attr("id");
      $('.'+ $thisID).show();
    }
    else {
      $('.'+ $thisID).hide();
    }
  }
); 

2 个答案:

答案 0 :(得分:1)

我测试了这个代码@ home,它可以按你想要的那样工作

<html>
<head>
    <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
    <script>
        $(document).ready(
            function()
            {
                $('.isChecked').click( 
                    function() 
                    {

                        if ( $(this).is(':checked') ) 
                        {
                             $(this).show();
                        }
                        else
                        {
                            $(this).hide();
                        }
                    }
                ); 
            }
        );
    </script>
</head>
<body>
    <form>
        <input type="checkbox" name="program" class="isChecked"/>
        <input type="checkbox" name="program" class="isChecked"/>
        <input type="checkbox" name="program" class="isChecked"/>
        <input type="checkbox" name="program" class="isChecked"/>
    </form>
</body>

我认为代码中的问题可能来自$(document).ready()处理程序,该处理程序在绑定动作侦听器之前等待加载整个DOM。 更重要的是,你的jquery代码对我不起作用。我的版本似乎有用,但一旦隐藏了复选框,用户就无法再处理它们了。

否则,我认为在你的模板中做一些Doctrine请求是个坏主意。

再见!

答案 1 :(得分:1)

您应该将“Program1”用作class名称而不是id这样

<div class="form_row sessionTime Program1" style="display:none;">
  Please choose an session time:
  <input type="checkbox" name="schedule" value="5:00 pm" />5:00 pm<br />
</div>

你的jQuery代码应该可以工作,你可以简化如下:

$('.isChecked').click( function() {
  if ( $(this).is(':checked') ) {
    $('.'+ this.id).show();
  }
  else {
    $('.'+ this.id).hide();
  }
});