2012-07-19 25 views
1

我只是不明白。奇怪的JS行爲:需要額外的線來執行功能?

function init() { 

    $(document).on('click', '#listFilter .option:not(".darr"), #listSort .option:not(".darr")', function() { 
     var selected = $(this).data('ajax-link'), 
      dropDown = $(this).parent().parent(), 
      filter = '', 
      sort = ''; 

     if (dropDown.attr('id') == "weaveListFilter") { 
      filter = selected; 
      sort = $('#listSort .darr').data('ajax-link'); 
     } else if (dropDown.attr('id') == "weaveListSort") { 
      filter = $('#listFilter .darr').data('ajax-link'); 
      sort = selected; 
     } 

     if (selected != dropDown.find('.darr').data('ajax-link')) 
      console.log('why?') 
      sortList(filter, sort, dropDown.parent()); 
      //console.log('wtf!') 
    }); 

} 

沒有console.log('why?')sortList()功能不叫! 爲什麼不在沒有此行的情況下調用?

最奇怪的是,這「爲什麼?」甚至沒有登錄我的控制檯。但是沒有它,sortList()函數不會執行。 「wtf!」在函數調用會被記錄後,但我不明白它。

想法?我是不是很笨?

+0

是否有JS錯誤錯誤安慰? – Imp 2012-07-19 17:05:10

+0

這聽起來像條件​​'selected!= dropDown.find('。darr')。data('ajax-link')'從來就不是真的。如果沒有記錄,那麼'console.log('why?')'永遠不會執行。試着用'''''''圍繞'console.log'調用和'sortList'。 – 2012-07-19 17:11:52

回答

4

因爲您的if失敗。在if正文周圍沒有大括號{ },所以只有第一條語句被認爲是if的一部分。通過添加console.log,可以使sortList不再是if的一部分。

首先,把你的大括號周圍if

if (selected != dropDown.find('.darr').data('ajax-link')) { 
    sortList(filter, sort, dropDown.parent()); 
} 

然後去找出爲什麼你if子句失敗。

+0

好的,我很笨!對於愚蠢的問題抱歉! – matt 2012-07-19 17:17:22

+0

是不是可以忽略{}括號?如果它的目的是正確的? – matt 2012-07-19 17:24:57

+0

是的,它是,但它是這樣的情況,使它有幫助,所以不犯錯誤。 – kbjr 2012-07-19 17:25:55

3

你忘了塊{ }if後:

if (selected != dropDown.find('.darr').data('ajax-link')) 

這種情況顯然是假的,那麼會發生什麼情況是:

  • console.log()不執行
  • sortList()沒有連接到if,所以它總是運行。

如果你對此有何評論console.log()出來,無論是陳述運行的,因爲

  • console.log()被註釋掉
  • sortList()是一個虛假的條件下