0

我正在开发一个插件,但它现在可以工作一半。问题是我从复选框中获取了一些变量,但该函数仅适用于复选框的最后一个选中项(列表中),而不适用于其他项。

我的代码:

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将仅适用于该行中的最后一个选择。

如何使该功能适用​​于每个选定的项目?

4

2 回答 2

2

在 .each 语句中执行函数:

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 );

                            }
                        });
                    });



                });
            });
于 2013-08-16T14:39:13.277 回答
1

在循环您拥有的复选框时

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

在循环您要附加的表单字段时

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

现在,当内循环完成并返回外循环时,您将val被设置回[gap(基本上擦除最后一个内循环附加)

一种解决方案是在click函数中声明变量并在第一个循环中追加(而不是设置)

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);
    });
});

旁注:

  • 作用域其他变量 ( var title, var name)
  • var name = jQuery(this).find('label').data('id');要么有一个值,要么是undefined(而不是"null"
于 2013-08-16T15:57:57.583 回答