请给我一点建议。
我正在尝试通过组合它的公共部分来编写来自2个类似函数的函数。 从这两个函数中,我想得到“selected1”和“selected2”,并在下一个函数calc中使用这些值。
var selected; var selected1; var selected2; $( '.type1' ).bind('change', function () { var values = []; $( 'input.type1:checkbox:checked' ).each(function ( _, el ) { values.push( base64decode( $( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected1 = result; calc(); }); $( '.type2' ).bind('change', function () { var values = []; $( 'input.type2:checkbox:checked' ).each(function ( _, el ) { values.push( base64decode( $( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected2 = result; calc(); }); function calc () { var selected3 = $.map(selected1, function (val, i) { return selected1[i] & selected2[i]; }); selected = base64encode( selected3 ); overlays(); };当我如上所述编写时,selected1和2都被定义为全局变量,因此函数calc工作。 但是,它不适用于我的重写代码。 萤火虫说“TypeError:a未定义”。 这是我的代码:
function tab (checkedTab, selected) { var values = []; checkedTab.each(function ( _, el ) { values.push( base64decode ($( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected = values[0]; }; $( '.type1' ).bind('change', function () { tab ($( 'input.type1:checkbox:checked' ), 'selected1'); calc(); }); $( '.type2' ).bind('change', function () { tab ($( 'input.type2:checkbox:checked' ), 'selected2'); calc(); });有人可以告诉我为什么我的代码不起作用?
Please give me a piece of advice.
I'm trying to write a function from 2 similar functions by combining its common parts. From these 2 functions, I'd like to get "selected1" & "selected2", and use these value in the next function, calc.
var selected; var selected1; var selected2; $( '.type1' ).bind('change', function () { var values = []; $( 'input.type1:checkbox:checked' ).each(function ( _, el ) { values.push( base64decode( $( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected1 = result; calc(); }); $( '.type2' ).bind('change', function () { var values = []; $( 'input.type2:checkbox:checked' ).each(function ( _, el ) { values.push( base64decode( $( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected2 = result; calc(); }); function calc () { var selected3 = $.map(selected1, function (val, i) { return selected1[i] & selected2[i]; }); selected = base64encode( selected3 ); overlays(); };When I write as above, both selected1&2 are defined as global variables, so function calc works. However, it doesn't work on my rewrite code. The firebug says "TypeError: a is undefined". Here is my code:
function tab (checkedTab, selected) { var values = []; checkedTab.each(function ( _, el ) { values.push( base64decode ($( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected = values[0]; }; $( '.type1' ).bind('change', function () { tab ($( 'input.type1:checkbox:checked' ), 'selected1'); calc(); }); $( '.type2' ).bind('change', function () { tab ($( 'input.type2:checkbox:checked' ), 'selected2'); calc(); });Could someone please tell me why my code doesn't work?
最满意答案
彼得,非常感谢你的评论。 调试变量后,它终于可以工作了! 这可能不是最好的方法,但我会发布我的重写代码作为参考。
var values; function tab (checkedTab) { values = []; checkedTab.each(function ( _, el ) { values.push( base64decode ($( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); return values[0]; }; $( '.type1' ).bind('change', function () { selected1 = tab ($( 'input.type1:checkbox:checked' )); calc(); }); $( '.type2' ).bind('change', function () { selected2 = tab ($( 'input.type2:checkbox:checked' )); calc(); });Thank you very much for your comments, Peter. After debugging variables, it finally works! This may not be the best way, but I will post my rewrite code as reference.
var values; function tab (checkedTab) { values = []; checkedTab.each(function ( _, el ) { values.push( base64decode ($( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); return values[0]; }; $( '.type1' ).bind('change', function () { selected1 = tab ($( 'input.type1:checkbox:checked' )); calc(); }); $( '.type2' ).bind('change', function () { selected2 = tab ($( 'input.type2:checkbox:checked' )); calc(); });jQuery结合了2个绑定函数(TypeError:a未定义)(jQuery combining 2 bind functions (TypeError: a is undefined))请给我一点建议。
我正在尝试通过组合它的公共部分来编写来自2个类似函数的函数。 从这两个函数中,我想得到“selected1”和“selected2”,并在下一个函数calc中使用这些值。
var selected; var selected1; var selected2; $( '.type1' ).bind('change', function () { var values = []; $( 'input.type1:checkbox:checked' ).each(function ( _, el ) { values.push( base64decode( $( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected1 = result; calc(); }); $( '.type2' ).bind('change', function () { var values = []; $( 'input.type2:checkbox:checked' ).each(function ( _, el ) { values.push( base64decode( $( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected2 = result; calc(); }); function calc () { var selected3 = $.map(selected1, function (val, i) { return selected1[i] & selected2[i]; }); selected = base64encode( selected3 ); overlays(); };当我如上所述编写时,selected1和2都被定义为全局变量,因此函数calc工作。 但是,它不适用于我的重写代码。 萤火虫说“TypeError:a未定义”。 这是我的代码:
function tab (checkedTab, selected) { var values = []; checkedTab.each(function ( _, el ) { values.push( base64decode ($( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected = values[0]; }; $( '.type1' ).bind('change', function () { tab ($( 'input.type1:checkbox:checked' ), 'selected1'); calc(); }); $( '.type2' ).bind('change', function () { tab ($( 'input.type2:checkbox:checked' ), 'selected2'); calc(); });有人可以告诉我为什么我的代码不起作用?
Please give me a piece of advice.
I'm trying to write a function from 2 similar functions by combining its common parts. From these 2 functions, I'd like to get "selected1" & "selected2", and use these value in the next function, calc.
var selected; var selected1; var selected2; $( '.type1' ).bind('change', function () { var values = []; $( 'input.type1:checkbox:checked' ).each(function ( _, el ) { values.push( base64decode( $( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected1 = result; calc(); }); $( '.type2' ).bind('change', function () { var values = []; $( 'input.type2:checkbox:checked' ).each(function ( _, el ) { values.push( base64decode( $( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected2 = result; calc(); }); function calc () { var selected3 = $.map(selected1, function (val, i) { return selected1[i] & selected2[i]; }); selected = base64encode( selected3 ); overlays(); };When I write as above, both selected1&2 are defined as global variables, so function calc works. However, it doesn't work on my rewrite code. The firebug says "TypeError: a is undefined". Here is my code:
function tab (checkedTab, selected) { var values = []; checkedTab.each(function ( _, el ) { values.push( base64decode ($( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); selected = values[0]; }; $( '.type1' ).bind('change', function () { tab ($( 'input.type1:checkbox:checked' ), 'selected1'); calc(); }); $( '.type2' ).bind('change', function () { tab ($( 'input.type2:checkbox:checked' ), 'selected2'); calc(); });Could someone please tell me why my code doesn't work?
最满意答案
彼得,非常感谢你的评论。 调试变量后,它终于可以工作了! 这可能不是最好的方法,但我会发布我的重写代码作为参考。
var values; function tab (checkedTab) { values = []; checkedTab.each(function ( _, el ) { values.push( base64decode ($( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); return values[0]; }; $( '.type1' ).bind('change', function () { selected1 = tab ($( 'input.type1:checkbox:checked' )); calc(); }); $( '.type2' ).bind('change', function () { selected2 = tab ($( 'input.type2:checkbox:checked' )); calc(); });Thank you very much for your comments, Peter. After debugging variables, it finally works! This may not be the best way, but I will post my rewrite code as reference.
var values; function tab (checkedTab) { values = []; checkedTab.each(function ( _, el ) { values.push( base64decode ($( el ).data( 'val' ) ) ); if ( values.length > 1 ) { values[0] = $.map(values[0], function (val, i) { return values[0][i] | values[1][i]; }); values.splice(1,1); } }); return values[0]; }; $( '.type1' ).bind('change', function () { selected1 = tab ($( 'input.type1:checkbox:checked' )); calc(); }); $( '.type2' ).bind('change', function () { selected2 = tab ($( 'input.type2:checkbox:checked' )); calc(); });
发布评论