2014-06-20 59 views
1

我有這段代碼可以刪除select表上的行。 (Fiddle

$('select').change(function() { 
    var $this = $(this), 
      list = $('table tbody tr'), 
      findoption = $this.find('option:selected'), 
      selected = findoption.data('hide'), 
      show_hide_li = $this.find("."+selected); 

     if (selected == "reset") { 
      list.show(); 
     } 
     else { 
      $('.'+selected).show(); 
      list.not('.'+selected).hide() 
     } 

}); 

當我移動碼出change function並定義它像下面,我有防止代碼工作$(本)的問題。任何人都可以告訴我如何定義一個函數,當$(this)在代碼中?

var cancel = function(){ 
    var $this = $(this), 
      list = $('table tbody tr'), 
      findoption = $this.find('option:selected'), 
      selected = findoption.data('hide'), 
      show_hide_li = $this.find("."+selected); 

     if (selected == "reset") { 
      list.show(); 
     } 
     else { 
      $('.'+selected).show(); 
      list.not('.'+selected).hide() 
     }   
} 


$('select').change(function() { 
     cancel(); 
    }); 

回答

2

我想這就是你想要做的。

function cancel(){ 
    var $this = $(this), 
      list = $('table tbody tr'), 
      findoption = $this.find('option:selected'), 
      selected = findoption.data('hide'), 
      show_hide_li = $this.find("."+selected); 

     if (selected == "reset") { 
      list.show(); 
     } 
     else { 
      $('.'+selected).show(); 
      list.not('.'+selected).hide() 
     }   
} 


$('select').change(cancel); 
0

這很簡單,但功能強大的線,應該更換後顯示的朋友:

$('select').change(cancel); 

上面一個替換以下行:

$('select').change(function() { 
     cancel(); 
}); 

因爲這三條線都相當於:

$('select').change(function() { 
     //you have access to 'this' here 
     function() { 
      //your body 
     } 
}); 

而你可以看到內部函數無法訪問this,除非你明確地將它作爲參數傳遞,你可以通過刪除嵌套函數來輕鬆避免。

1

您可以通過 「本」 作爲參數傳遞給函數

var cancel = function(param1){ 
    var $this = $(param1), 
      list = $('table tbody tr'), 
      findoption = $this.find('option:selected'), 
      selected = findoption.data('hide'), 
       show_hide_li = $this.find("."+selected); 

     if (selected == "reset") { 
      list.show(); 
     } 
     else { 
      $('.'+selected).show(); 
      list.not('.'+selected).hide() 
     }   
} 


$('select').change(function() { 
     cancel(this); 
}); 
1

使用.on的jQuery的方法

$('select').on('change', cancel); 

var cancel = function(){ 
    var $this = $(this), 
     list = $('table tbody tr'), 
     findoption = $this.find('option:selected'), 
     selected = findoption.data('hide'), 
     show_hide_li = $this.find("."+selected); 

     if (selected == "reset") { 
      list.show(); 
     } 
     else { 
      $('.'+selected).show(); 
      list.not('.'+selected).hide() 
     }   
}