2010-08-16 102 views
1

该函数被写入两次以保存复选框状态以及相应的div文本。我该如何在函数中编写代码,然后在加载时分别调用它两次并分别单击事件?避免jQuery中的函数重复

$(document).ready(function() { 
        $("#bquote").load("quotes_in.php", function() { 

        // a key prefix is used for the cookie/storage 
        var storedData = getStorage('com_mysite_checkboxes_'); 

        $('div.check input:checkbox').bind('change',function(){ 
        $('#ab_' + this.id).toggle($(this).is(':checked')); 

        // save the data on change 
        storedData.set(this.id, $(this).is(':checked')?'checked':'not'); 
        }).each(function() { 

        // on load, set the value to what we read from storage: 
        var val = storedData.get(this.id); 
        if (val == 'checked') $(this).attr('checked', 'checked'); 
        if (val == 'not') $(this).removeAttr('checked'); 
        if (val) $(this).trigger('change'); 

        }); 
       });     

      }); 



      $(function() { 


      /*load quotes on click of link*/ 
      $("a#main") 
       .click(function() { 
        $(this).addClass("current"); 
        $("#bquote").load("quotes_in.php", function() { 

        // a key prefix is used for the cookie/storage 
        var storedData = getStorage('com_mysite_checkboxes_'); 

        $('div.check input:checkbox').bind('change',function(){ 
        $('#ab_' + this.id).toggle($(this).is(':checked')); 

        // save the data on change 
        storedData.set(this.id, $(this).is(':checked')?'checked':'not'); 
        }).each(function() { 

        // on load, set the value to what we read from storage: 
        var val = storedData.get(this.id); 
        if (val == 'checked') $(this).attr('checked', 'checked'); 
        if (val == 'not') $(this).removeAttr('checked'); 
        if (val) $(this).trigger('change'); 

         });  
       }); 
      }); 

回答

2

可以作为一个命名函数声明一次,并调用它两次,这样的:

$(function() { 
    function loadQuotes() { 
    $("#bquote").load("quotes_in.php", function() { 

     // a key prefix is used for the cookie/storage 
     var storedData = getStorage('com_mysite_checkboxes_'); 

     $('div.check input:checkbox').bind('change',function(){ 
     $('#ab_' + this.id).toggle(this.checked); 

     // save the data on change 
     storedData.set(this.id, this.checked?'checked':'not'); 
     }).each(function() { 

     // on load, set the value to what we read from storage: 
     var val = storedData.get(this.id); 
     if (val == 'checked') $(this).attr('checked', 'checked'); 
     if (val == 'not') $(this).removeAttr('checked'); 
     if (val) $(this).trigger('change'); 

     }); 
    });     
    } 
    $("a#main").click(function() { 
    $(this).addClass("current"); 
    loadQuotes(); 
    }); 
    loadQuotes(); //call it once on load 
}); 

我在上面也改变$(this).is(':checked')this.checked,没有必要让它越慢,DOM物业在这里工作:)

+0

非常感谢! – input 2010-08-16 18:26:28