2013-08-25 70 views
1

美化以下代碼的最優雅方式是什麼?我想擺脫重複代碼:擺脫jQuery中的重複代碼

$('#popup_settings_enable_name') 
.click(function() { 
    // ... 
}) 
.triggerHandler('click'); 

注意.trigger也會做同樣的事情很多:

$('#popup_settings_enable_name').click(function() { 
    $el = $('#popup_settings_name_field'); 
    if ($(this).prop('checked')) { 
     $el.removeAttr("disabled"); 
    } else { 
     $el.attr("disabled", "disabled"); 
    } 
}).each(function() { 
    $el = $('#popup_settings_name_field'); 
    if ($(this).prop('checked')) { 
     $el.removeAttr("disabled"); 
    } else { 
     $el.attr("disabled", "disabled"); 
    } 
}); 
+2

嗯,可能更適合http://codereview.stackexchange.com/ – j08691

回答

3

可以使用.triggerHandler安裝後只需觸發click事件處理程序但應該注意的是.trigger.triggerHandler之間存在細微的差異。手冊頁明確提及它們。

0

你可以簡單的觸發事件而執行的處理程序進行初始化:

$('#popup_settings_enable_name').click(function() { 
    … 
}).click(); 

另一種方法是隻用一個函數聲明:

function update() { 
    // a little simplification: 
    $('#popup_settings_name_field').prop("disabled", !this.checked); 
} 
$('#popup_settings_enable_name').click(update).each(update); 
0

觸發click事件手動可能會導致意外副作用(如果還有其他代表也被分配了點擊事件呢?)

我會建議重構dupat編輯成自己的方法,然後只需將該方法傳入jQuery .click()函數,然後將其傳遞給jQuery .each()函數。