2013-08-16 21 views
0

我正在開發一個插件,但它現在可用於一半。問題是我從複選框中獲取了一些變量,但是該函數只能在複選框的最後一個選中項(在列表中)工作,而不能用於其他項。Javascript函數僅適用於一個變量

我的代碼:

jQuery(document).ready(function(){ 

    jQuery('#gap-filtedit input[type=button]').click(function(){ 
    jQuery('.filter-checkbox:checked').each(function() { 
     getchecked = jQuery(this).data('rel'); 

     val = '[gap '; 
     console.log(getchecked); 

     jQuery('.' + getchecked).each(function(){ 
     val = val + getchecked + '='; 
     name = jQuery(this).find('label').data('id'); 
     title = jQuery(this).find('input[type=text],select').val(); 

     if (!title) title = ''; 
     if (name != 'null') { 

      val = val + name + ':' + title + ', '; 

     } 
     }); 
    }); 


    window.send_to_editor(val); 
    }); 
}); 

日誌會給我選擇的選項。但console.log之後的功能僅適用於該行中最後選擇的功能。

如何讓功能爲每個選定的項目工作?

+2

您使用的相同的'val'所有迭代... –

+0

你沒有使用'var'來聲明範圍內的所有變量,所有使用的變量都是全局變量。 – zzzzBov

回答

1

而循環複選框你有

val = '[gap '; // setting the value 

而循環要附加

... 
val = val + getchecked + '='; // appending 
... 
val = val + name + ':' + title + ', '; // appending 
... 

現在,當表單字段內循環結束並返回到外循環,您的val被設置回[gap(基本上擦除最後內環追加)

一種解決方案是在第一回路

example jsfiddle

jQuery(document).ready(function() { 
    jQuery('#gap-filtedit input[type=button]').click(function() { 
     var val = ""; // give variable proper scope vs creating a global 

     jQuery('.filter-checkbox:checked').each(function() { 
      getchecked = jQuery(this).data('rel'); 

      val += '[gap '; // append instead of set 
      console.log(getchecked); 

      jQuery('.' + getchecked).each(function() { 
       val += getchecked + '='; 
       var name = jQuery(this).find('label').data('id'); 
       var title = jQuery(this).find('input[type=text],select').val(); 

       if (!title) title = ''; 
       if (name != undefined) { 
        val += name + ':' + title + ', '; 
       } 
      }); 
     }); 

     window.send_to_editor(val); 
    }); 
}); 

click函數內聲明變量和附加(而不是集)附註:

  • 範圍其他變量(var titlevar name
  • var name = jQuery(this).find('label').data('id');要麼有一個值或者是undefined(而不是"null"
+0

感謝你的迴應,我跟着你說你的話。現在我的問題是我需要輸出如下(如果有2個複選框選中:'getchecked = name + title,name + title,name + title,getchecked = name + title,name + title,name + title'所以我' m試圖弄清楚如何從每個函數中獲取getchecked值,但是必須爲每個複選框進行檢查。可以幫助我嗎? – Trekdrop

+0

+必須是:當然..(不能編輯我的評論) – Trekdrop

+0

通過'labels'創建第三個循環... http://jsfiddle.net/NzJSZ/3/ – MikeM

2

執行功能。每個語句中:

jQuery(document).ready(function(){ 

     jQuery('#gap-filtedit input[type=button]').click(function(){ 
      jQuery('.filter-checkbox:checked').each(function() { 
        getchecked = jQuery(this).data('rel'); 

      val = '[gap '; 
      console.log(getchecked); 

jQuery('.' + getchecked).each(function(){ 
     val = val + getchecked + '=';      
     name = jQuery(this).find('label').data('id'); 
     title = jQuery(this).find('input[type=text],select').val();  

        if (!title) title = ''; 
         if (name != 'null') { 

       val = val + name + ':' + title + ', '; 
       window.send_to_editor(val); 

          } 
         }); 
        }); 



       }); 
      }); 
+0

這確實有效..我的輸出現在是類似的(如果選擇1選項): 'getchecked = name:title,getchecked = name:title,getchecked = name:title.'但是我真正需要的是這樣的東西: 'getcheck =名稱:標題,名稱:標題,名稱標題'所以getchecked不能在每個函數中,但是它必須在每個選項被檢查時返回。希望你明白我的意思 – Trekdrop

相關問題