0

基本的にCookieから値を取得して特定の名前のチェックボックスを探し、Cookieの値に基づいて値を追加する、非常によく似たコードを持つ2つの条件があります。

私の質問は、クッキーの名前を切り替えるだけで本質的に同じことを行うときに、これを 2 つの条件で使用する非常に冗長なコードのように思われることです。これをどのように凝縮して、よりコンパクトにし、それほど冗長にしないでしょうか。私はこれを理解しようとして頭を叩いています。助けてくれてありがとう。コードを見ることでよりよく学ぶことができるので、サンプルは非常に役に立ち、高く評価されています。

$.fn.userLocator = function(opts) {

    if($.cookie('userLocation')){           
       var userLoc = []; 
       userLoc = $.cookie('userLocation').split(",");

       for(i=0; i!=userLoc.length;i++) {
        var checkbox = $("input[name='filter-location'][value='"+userLoc[i]+"']");
        checkbox.attr("checked","checked");            
       } 
    }

    if($.cookie('userServices')){
       var serviceLoc = []; 
       serviceLoc = $.cookie('userServices').split(",");

       for(i=0; i!=serviceLoc.length;i++) {
        var checkbox = $("input[name='filter-service'][value='"+serviceLoc[i]+"']");
        checkbox.attr("checked","checked");           
       } 
    }

}
4

3 に答える 3

1

私があなたなら、次のようなことを試します。

var cookieNames = {'location' : 'userLocation','service' : 'userServices'};

for(var key in cookieNames) {     
   var cookieName = cookieNames[key]; 
   if ($.cookies(cookieName)) { 
       var inputName = key;
       var valueList;
       valueList = $.cookies(cookieName).split(",");

       for(i=0; i!=valueList.length;i++) {
           var checkbox = $("input[name='filter-" + inputName + 
                            "'][value='"+valueList[i]+"']");
           checkbox.attr("checked","checked");            
       } 

      }
   }
}
于 2013-10-15T04:33:17.607 に答える
0

これを関数に移動してみませんか

何かのようなもの

   function checkboxHelper(service)
    { 
     var servicevar = []; 
       servicevar = $.cookie(service).split(",");
       for(i=0; i!=servicevar.length;i++) {
        var checkbox = $("input[name='filter-service'][value='"+servicevar[i]+"']");
        checkbox.attr("checked","checked");           
       } 
    }

その後、メソッドを呼び出すことができます

checkboxHelper('userLocation');

于 2013-10-15T04:25:52.370 に答える
0
$.fn.userLocator = function(opts) {
  var defaults = {
            cookiename: ""// by default no cookie name if you pass with opts then it will extend in it

        };

        var options= $.extend({}, $.fn.userLocator.defaults, opts);

         var tempname= options.cookiename.replace("user","");

    if($.cookie(options.cookiename)){           
       var userLoc = []; 
       userLoc = $.cookie(options.cookiename).split(",");

       for(i=0; i!=userLoc.length;i++) {
        var checkbox = $("input[name='filter-'"+tempname+"][value='"+userLoc[i]+"']");
        checkbox.attr("checked","checked");            
       } 
    }



}

呼び出し時に。userLocator ({ cookiename: "your cookie name" });

于 2013-10-15T04:25:56.197 に答える