我应该把这个javascript放在哪里?

时间:2017-04-10 17:58:53

标签: javascript php jquery html

好的我现在已经有好几个小时了。我有一个来自html的select标签,其选项由php填充,如下所示:

<select class="form-control" name="statusOption" id="status">
    <?php
       $connn = $dbObject->dbConnect();
       $results = $connn->query("SELECT statusName from status");
       $counter=0;
       while($statusNames = mysqli_fetch_array($results))
       {
          if($dbObject->getStatusValue($idstatus[0])===$statusNames[0])
             echo "<option selected='selected' value='".$counter."''>".$statusNames[0]."</option>";
          else echo "<option value='".$counter."''>".$statusNames[0]."</option>";
          $counter++;
       }
       $connn->close();

...... etc

这里的要点是,选择标签位于模态内。现在默认情况下,选择标签是从数据库中选择的(这里的按钮是&#34;编辑状态&#34;所以我有&#34;工作&#34;状态,当我点击编辑按钮时,模态显示,选择标签自动选择&#34;工作&#34;。同样的事情也与#34;缺陷&#34;。现在为了错误捕获的目的,如果默认选择标签选择工作,如果我将选项更改为&#34; defect&#34;,应弹出另一个选择标记(它用于状态注释,如修复,替换或处置)。如果我再次将select标记的选项更改为&#34;工作&#34;备注的选择标记应该消失,因为它仅用于&#34;缺陷&#34;事物。

问题是这个。我有这个代码(javascript),以便我可以操纵显示和隐藏其他选择标记:

 <script type='text/javascript'>
            $('#status').change(function(){
                if($(this).val() === 1){
                    $('#hide').show();
                }else{
                    $('#hide').hide();
                }
            });
            </script>

状态的select标签的ID是status,然后备注的select标签是hide:

<select class="form-control" name="statusRemark" style="display: none;" id="hide">
 <?php 
     $connn = $dbObject->dbConnect();
     $results = $connn->query("SELECT statusremarkName from statusremark");
     while($row = mysqli_fetch_array($results))
     {
        echo "<option>".$row[0]."</option>";
     }
      $connn->close();

  ?>
  </select>

然而。当我将脚本标记放在html的head标记中或body标记的底部或select标记之后时,它都不起作用。即使在PHP中回应它,也没有用。我不知道在哪里放置该脚本,以便在单击“缺陷”时显示另一个选择标记。帮助

2 个答案:

答案 0 :(得分:1)

添加以说明我的评论。至于在哪里添加它,我建议在body元素的底部。您遇到的问题与您的php无关,除非您在加载到客户端之前动态创建它们时选择器不匹配。我的猜测是,事件没有正确附加,因为它在文档完全加载之前运行而没有找到您的内容,或者您​​试图选择错误的选择器。其他人建议使用事件委托,这也可以解决dom渲染问题之前的解雇问题。

<script>
    // Adding the jQuery namespace and aliasing, this avoids namespace 
    // collision in codebases that have multiple handlers running jquery 
    jQuery(document).ready(function($) {
        $('#status').on('change', function(event){
            // adding a log here for debugging, will make sure 
            // you are triggering the event even if you see no change
            console.log('inside change handler');
            console.log($(this).val());

            if($(this).val() === 1){
                $('#hide').show();
            }else{
                $('#hide').hide();
            }
        });
    });
</script>

答案 1 :(得分:0)

哇哇哇哇哇哇哇哇哇哇哇哇哇。我使用@D Lowther的代码,然后稍微调整一下。这行代码if($(this).val() === 1){我将其更改为if($(this).val() == 1){我不知道如何但是。很奇怪为什么那个小小的头疼。

编辑:好的,正如@Guruprasad Rao所建议的那样if($(this).val() === "1"也有效。