nielle>> nej de er ikke nødvendigvis i stigende rækkefølge. Jeg vil bare gerne gannemløbe alle mine værdier i mit array postChecked og se om disse også er i preCheked, hvis ikke er der en difference og jeg skal så lave en alert box
nielle, nej alle værdierne er unikke dvs hver array kan ikke indeholde ens værdier så preChecked = {1,2,3,6,7} er ok men {1,2,3,3,6,7} er ikke ok dette gælder også for arrayet postChecked
ok sorry kom til at lave syntaks for arrays i Java og ikke javasript. Min arrays kommer fra en side hvor jeg har en masse chekbokse. Ved load af siden kalder jeg en funktion init der populerer mit array postCheked. Når jeg så efterfølgede har checked diverse chekboxe af trykker jeg på save og kalder onsubmit="return checkCheckBoxes(this)"
function checkCheckBoxes(form) { var postCheckedModerators = new Array(); for(i = 0; i< form.selectedGroups.length;i++) { if(form.selectedGroups[i].postCheckedModerators) { postCheckedModerators[postCheckedModerators.length]=form.selectedGroups[i].value; } }
for(var k=0; k < preCheckedModerators.length; k++) { var found = 0; // false for(var j=0; j < postCheckedModerators.length; j++) { if(preCheckedModerators[k]==postCheckedModerators[j]) { found = 1;// true continue; } } } }
Så har jeg et andet og bedre bud. Det er nemlig langt hurtigere at tjekke ned i en hash-tabel. Giv alle dine checkbokse en ID ... f.eks: 'ch0', 'ch1', 'ch2', osv.
På onload fylder du et objekt med de checked elementer - på formen: var preChecked = {'ch1':1, 'ch3':1, 'ch4':1};
Så kan du bladre dine elementer igennem på onsubmit:
function tjekChBoxes(form) { var aElms = form.elements; for (var i=0,j=aElms.length; i<j; i++) if (aElms[i].checked&&!preChecked[ aElms[i].id ]) return false; return true; }
- men det allerbedste ville vel være at sætte en attribut på hver checkbox. På onload bladrer du alle checkboksene igennem. Hvis den enkelte er checked, sætter du denne attribut: CHECKBOX.setAttribute("prechecked", "true");
- hvis ikke: CHECKBOX.setAttribute("prechecked", "false");
På onsubmit spørger du: function tjekChBoxes(form) { var aElms = form.elements; for (var i=0,j=aElms.length; i<j; i++) if (aElms[i].type=="checkbox"&&(aElms[i].getAttribute("prechecked")!=aElms[i].checked)) return false; return true; }
Tusinde tak olebole og nielle. Min løsning blev følgende.
var preCheckedModerators = new Array(); function checkCheckBoxes(form) { var postCheckedModerators = new Array(); var equivalent = true; for(i = 0; i< form.selectedGroups.length;i++) { if(form.selectedGroups[i].checked) { postCheckedModerators[postCheckedModerators.length]=form.selectedGroups[i].value; } } for(var k=0; k < preCheckedModerators.length; k++) { var found = false; for(var j=0; j < postCheckedModerators.length; j++) { if(preCheckedModerators[k]==postCheckedModerators[j]) { found = true; break; } } if(!found) { equivalent = false; } } if(!equivalent) { if (confirm('Are you sure you want to delete moderator?')) { return true; } return false; } }
function init() { var objInput = document.getElementsByTagName('input'); for(var i=0; i < objInput.length; i++) { if(objInput[i].getAttribute('type') == 'checkbox') { if(objInput[i].checked) { preCheckedModerators[preCheckedModerators.length] = objInput[i].value; } } } } olebole>> Det foreslag ser rigtigt smart ud. Vil prøve at implementere det når jeg får mere tid. Men pga manglede tid blev løsningen som ovenstående :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.