javascript - How can I loop through a list of form ID's and add a submit handler to each? -
i have website containing lot of different contact forms. want keep array of id's (and other related settings) can loop through them , add submit handlers each one.
the problem last form in array seems handler attached it.
list of forms:
forms = [ {id: '#contact-form-1', ...}, {id: '#contact-form-2', ...} ]
how i'm trying add submit handlers:
for (i in forms) { $(document).on('submit', forms[i].id, function(){ // validation, send email etc. } }
is $(document).on() right way approach this? have tried $(forms[i].id).submit(); same outcome; last form in list gets bound to.
might want other way round.
/* listen submit forms */ $('form').on('submit', function() { /* id of 1 */ var _id = $(this).attr('id'); /* conditions on _id */ ));
so objects :
var formids = { formidone: { func : function() { alert('called form id one'); }}, formidtwo: { func : function() { alert('called form id two'); }} };
then say:
$('form').on('submit', function() { /* id of 1 */ var _id = $(this).attr('id'); /* call form function associated form id */ formids[_id].func(); ));
a few ways this, depends how want organise code , little easier defining listener once
adding edit : not explained going wrong in original code - context of i
not retained correctly ( hinted in comment )
the solution make use of function :
function makehandler (index) { $('#'+forms[index].id).on('submit', function(){... }); } (i in forms) { makehandler(i); }
this best place problems around making functions in loop - how fix jslint error 'don't make functions within loop.'?
would still favour using one handler above, easier maintain / read ( imo )
Comments
Post a Comment