为什么这个jQuery脚本不起作用?

时间:2011-12-08 17:41:51

标签: jquery

<script type="text/javascript">
$(document).ready(function(){
  $("tr.reqDet").hide(); 

  $("[title='requestType']").change(function(){
    if ($("[title='requestType']").val()!=""){
        $("#reqDet").hide();
    } else {  
        $("#reqDet").show();  
    }
  });

</script>

我无法让脚本中的if语句工作......

详细信息:我正在使用SharePoint,它会呈现一个带有属性title =“requestType”的下拉框。当requestType框没有设置为初始值,即“”时,我想要出现一个带有“reqDet”类的控件。


无论如何,谢谢大家。这是适用于我的解决方案:

<script type="text/javascript">
$(document).ready(function(){
  $("tr.reqDet").hide(); 

  $("select[title='requestType']").change(function(){
        $(".reqDet").toggle($(this).val()!== "");
  });
 });
</script>

5 个答案:

答案 0 :(得分:5)

更新回答:由于您提到“具有类reqDet的元素”,问题在于您使用的是ID选择器(#reqDet)而不是类选择器.reqDet

此外,除此之外,您还可以对代码进行一些改进:

  1. 使您的选择器更加明确,这样就不必检查页面中的每个元素
  2. 利用回调中的this,这样您就不必再次使用DOM了
  3. 使用toggle代替hideshow,让您失去if
  4. 所以你可以把它减少到这个:

    $("select[title='requestType']").change(function(){ 
       $(".reqDet").toggle($(this).val() == ""); 
    }); 
    

答案 1 :(得分:1)

$(document.ready(function() {
    var details = $('tr#reqDet');
    var dropdown = $("select[title='requestType']");
    details.hide();

    dropdown.change(function() {
        details.toggle(dropdown.val() === '');
    });
});

答案 2 :(得分:1)

在为change事件添加侦听器之前是否故意隐藏带有classname reqDet的tr,然后尝试隐藏id为reqDet的元素?您还应该指定哪种类型的元素具有请求类型的标题:

<script type="text/javascript">
$(document).ready(function(){
  $("tr.reqDet").hide(); 

  $("select[title='requestType']").change(function(){
    if ($(this).val()!=""){
        $(".reqDet").hide();// should this be a class or id of reqDet 
    } else {  
        $(".reqDet").show();  // Change to "." to select class. # is selecting id so it isn't finding it. 
    }
  });

</script>

答案 3 :(得分:0)

$(document).ready(function(){
  $("tr.reqDet").hide(); 

  $("select[title='requestType']").change(function(){
    if ($("[title='requestType']").val()!=""){
        $("#reqDet").hide();
    } else {  
        $("#reqDet").show();  
    }
  });

答案 4 :(得分:0)

我认为if语句工作正常,但其中的选择器是错误的。正如您所提到的,您要显示/隐藏的控件具有类reqDet,请使用类选择器。试试这个。

$(document).ready(function(){
   $("tr.reqDet").hide(); 

   $("[title='requestType']").change(function(){
      if ($(this).val()){
          $(".reqDet").hide();
      } else {  
          $(".reqDet").show();  
      }
   });
});