我应该在哪里放这个JavaScript?

问题描述:

好吧我现在有这个问题已经好几个小时了。我有一个select标签从HTML和它的选择是由PHP填充像这样:我应该在哪里放这个JavaScript?

<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 

这里的关键是,那选择标记是一个模式里面。现在,默认情况下,选择标记是从数据库中选择的(这里的按钮是“编辑状态”,所以示例中我有“工作”状态,当我点击编辑按钮时,模式显示出来,并且选择标记自动选择“工作”,“缺陷”也是一样,现在出于错误捕获的目的,如果默认选择标签选择工作,如果我将选项更改为“缺陷”,另一个选择标签应该弹出(用于状态备注如果我再次将选择标签的选项更改为“工作”,备注的选择标签应该消失,因为它仅用于“缺陷”的事情

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

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

的情况选择标签的ID是状态,然后对言论的选择标记为隐藏:

<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的头标签或正文标签的底部或选择标签后面时,它们都不起作用。即使在php中回应它,这也没有帮助。我不知道在哪里放置该脚本,以便在单击缺陷时显示另一个选择标记。帮帮我?

+0

好吧,如果你混淆了'$(this).val()=== 1'中的“1”正如你可以从select id = status看到的那样,我用php来计算它,假设0正在工作,然后1是缺陷 –

+0

它只是在它所针对的元素之后的任何地方(在这种情况下,'

+0

你有没有尝试包装你的jQuery文档准备功能?这将确保dom在尝试附加事件之前已经呈现 –

补充说明我从上面的评论。至于在哪里添加它,我建议在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> 
+0

我试过你的代码。正如我期望的那样,我从工作中得到0分,而从缺陷中得到1分。但另一个选择标签不显示。 –

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

编辑:好的@Guruprasad饶建议if($(this).val() === "1"也可以。