2012-03-21 106 views
1

我有這樣的代碼:jQuery的檢查,如果元素存在,如果conditon

<?php if ($this->session->userdata('permission') == 4 || $this->session->userdata('permission') == 3) : ?> 
      <select name="caffe" id="caffe"> 
       <?php foreach($caffe as $key) : ?> 
       <option value="<?php echo $key['id_caffe'] ?>"><?php echo $key['name'] ?></option> 
       <?php endforeach; ?> 
      </select> 
      <div id="gll_select"> 
       <script> 
       var caffe = $("#caffe").val(); 
       var cff_name = $("#caffe option:first").text(); 
       $("#gll_select").load("<?php echo base_url() ?>form/galleries", {id : caffe}, function(){     
          $("#gll").on('change', function(){ 
      var cff_name = $("#caffe option:selected").text(); 
      get_gallery(cff_name); 
      console.log(cff_name); 
     }); 
       }); 
       </script> 
      </div> 

      <?php else : ?> 

      <input type="hidden" name="caffe_name" id="caffe_name" value="<?php echo $caffe_name ?>" /> 
      <input type="hidden" name="caffe_id" id="caffe_id" value="<?php if(isset($caffe_id)) echo $caffe_id; ?>" /> 
      <div id="gll_select"> 
       <?php if (isset($gallery)) : ?> 
      <select name="gll" id="gll"> 
     <?php foreach ($gallery as $key) : ?> 
      <option value="<?php echo $key['id_gallery'] . " " . $key['name'] ?>"><?php echo $key['name'] ?></option> 
     <?php endforeach; ?> 
      <?php endif; ?> 
      </select> 
      </div> 

      <?php endif ?> 

和jQuery這樣的代碼:

if ($("#caffe".length)){var cff_name = $("#caffe option:first").text(); } 
    else{var cff_name = $("#caffe_name").val();} 

問題是以下 - 第一條語句總是真(#如果是PHP IF statement is FALSE,咖啡將不存在)。什麼似乎是問題?

+1

' 「#caffe」 .length'將返回'6'因爲字符串是長6個字符。所以你有效地做'if($(6))'。 – 2012-03-21 13:26:15

回答

5

應該

if ($("#caffe").length) { ... } 

您的代碼:

if ($("#caffe".length)) { ... } 

是得到一個字符串常量的長度和傳遞一個jQuery的。調用jQuery主函數($)時總會得到非空結果,因此將其轉換爲布爾值作爲if語句的一部分的結果始終爲真。

當您改爲測試從搜索選擇器中返回的jQuery對象的.length屬性時,您將檢查該數字是否非零。

+0

酷,它現在工作:)。謝謝你的解釋:) – Sasha 2012-03-21 13:32:26

2

我想我看到的問題......

if ($("#caffe").length){var cff_name = $("#caffe option:first").text(); } 

.length不是選擇的一部分,它的包裹組的屬性。

3

變化$("#caffe".length)$("#caffe").length

+0

從技術上講,這不是一個語法錯誤。語法是有效的,但它不是OP想要做的。 – 2012-03-21 13:26:49

+0

是的。你是對的 – safarov 2012-03-21 13:27:30

+0

True - '$(「#caffe」.length)'與$(6)'相同​​,這並不是Sasha想到的。 – 2012-03-21 13:31:24

相關問題