WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Göra en loop istället? (https://www.wn.se/forum/showthread.php?t=1039709)

sandstream 2009-12-22 15:15

Göra en loop istället?
 
Hej!

Jag är usel på javascript men har iaf lyckats knåpa ihop en funktion som gör det jag vill men borde det inte gå att byta ut 10 IF-satser mot en och ha ett dynamiskt variabelnamn?

Det jag vill göra är att lägga ihop summan av 1 till 10 varibler, antalet varierar, för att se om totalen är mindre än 1 och då visa ett felmeddelande. Använder jQuery Form plugin för att hantera formuläret och hämta data med AJAX (det borde dock inte ha någon betydelse).

Så här ser koden ut:

function validate_crt(formData, jqForm, options) {
var antaltotal=0;
var form = jqForm[0];

if (form.antal1==undefined){}else{if (form.antal1.value>0) {antaltotal=antaltotal+form.antal1.value}}
if (form.antal2==undefined){}else{if (form.antal2.value>0) {antaltotal=antaltotal+form.antal2.value}}
if (form.antal3==undefined){}else{if (form.antal3.value>0) {antaltotal=antaltotal+form.antal3.value}}
if (form.antal4==undefined){}else{if (form.antal4.value>0) {antaltotal=antaltotal+form.antal4.value}}
if (form.antal5==undefined){}else{if (form.antal5.value>0) {antaltotal=antaltotal+form.antal5.value}}
if (form.antal6==undefined){}else{if (form.antal6.value>0) {antaltotal=antaltotal+form.antal6.value}}
if (form.antal7==undefined){}else{if (form.antal7.value>0) {antaltotal=antaltotal+form.antal7.value}}
if (form.antal8==undefined){}else{if (form.antal8.value>0) {antaltotal=antaltotal+form.antal8.value}}
if (form.antal9==undefined){}else{if (form.antal9.value>0) {antaltotal=antaltotal+form.antal9.value}}
if (form.antal10==undefined){}else{if (form.antal10.value>0) {antaltotal=antaltotal+form.antal10.value}}

if (antaltotal<1) {
alert('Skriv in önskat antal och klicka sedan på LÄGG I KUNDVAGNEN');
return false;
}
$('#kundvagn_submit').hide();
$('#kundvagn_submit_loading').show();
return true;
}


Några bra idéer?

qson 2009-12-22 16:48

Citat:

Ursprungligen postat av sandstream (Inlägg 20336456)
Hej!

Jag är usel på javascript men har iaf lyckats knåpa ihop en funktion som gör det jag vill men borde det inte gå att byta ut 10 IF-satser mot en och ha ett dynamiskt variabelnamn?

Det jag vill göra är att lägga ihop summan av 1 till 10 varibler, antalet varierar, för att se om totalen är mindre än 1 och då visa ett felmeddelande. Använder jQuery Form plugin för att hantera formuläret och hämta data med AJAX (det borde dock inte ha någon betydelse).

Så här ser koden ut:

function validate_crt(formData, jqForm, options) {
var antaltotal=0;
var form = jqForm[0];

if (form.antal1==undefined){}else{if (form.antal1.value>0) {antaltotal=antaltotal+form.antal1.value}}
if (form.antal2==undefined){}else{if (form.antal2.value>0) {antaltotal=antaltotal+form.antal2.value}}
if (form.antal3==undefined){}else{if (form.antal3.value>0) {antaltotal=antaltotal+form.antal3.value}}
if (form.antal4==undefined){}else{if (form.antal4.value>0) {antaltotal=antaltotal+form.antal4.value}}
if (form.antal5==undefined){}else{if (form.antal5.value>0) {antaltotal=antaltotal+form.antal5.value}}
if (form.antal6==undefined){}else{if (form.antal6.value>0) {antaltotal=antaltotal+form.antal6.value}}
if (form.antal7==undefined){}else{if (form.antal7.value>0) {antaltotal=antaltotal+form.antal7.value}}
if (form.antal8==undefined){}else{if (form.antal8.value>0) {antaltotal=antaltotal+form.antal8.value}}
if (form.antal9==undefined){}else{if (form.antal9.value>0) {antaltotal=antaltotal+form.antal9.value}}
if (form.antal10==undefined){}else{if (form.antal10.value>0) {antaltotal=antaltotal+form.antal10.value}}

if (antaltotal<1) {
alert('Skriv in önskat antal och klicka sedan på LÄGG I KUNDVAGNEN');
return false;
}
$('#kundvagn_submit').hide();
$('#kundvagn_submit_loading').show();
return true;
}


Några bra idéer?

Har "antal"-fälten bara namn eller har de ID också?
ex.
Kod:

<input type="text" name="antal2" id="antal2" value="" />
Då kan du göra en loop liknande detta...
PHP-kod:

function validate_crt(formDatajqFormoptions) {
  var 
antaltotal=0;

  for ( var 
1<= 10i++ ) {
    var 
input = $('antal'+i);
    if ( 
typeof input ) != 'undefined' && input.value )
      
antaltotal += input.value;
  }

  if (
antaltotal<1) {
    
alert('Skriv in önskat antal och klicka sedan på LÄGG I KUNDVAGNEN');
    return 
false;
  }
  $(
'#kundvagn_submit').hide();
  $(
'#kundvagn_submit_loading').show();
  return 
true;



sandstream 2009-12-23 11:07

De har både namn och id så jag testar din lösning! Återkommer!

sandstream 2009-12-23 11:22

Tyvärr så fungerade det inte.
var form = jqForm[0]; måste vara med eftersom det är där variablerna ligger.

Så här skriver de om pluginen i ett exempel:
// jqForm is a jQuery object which wraps the form DOM element
//
// To validate, we can access the DOM elements directly and return true
// only if the values of both the username and password fields evaluate
// to true

var form = jqForm[0];
if (!form.username.value || !form.password.value) {
alert('Please enter a value for both Username and Password');
return false;
}
alert('Both fields contain values.');

qson 2009-12-23 11:42

Citat:

Ursprungligen postat av sandstream (Inlägg 20336546)
Tyvärr så fungerade det inte.
var form = jqForm[0]; måste vara med eftersom det är där variablerna ligger.

Men om fälten har ID-attribut ska den fungera.
Ok vi gör ett nytt försök :)

PHP-kod:

function validate_crt(formDatajqFormoptions) {
  var 
antaltotal=0;
  var 
form jqForm[0];

  for ( var 
1<= 10i++ ) {
    var 
input form['antal'+i]; // Här har jag ändrat så den använder form istället
    
if ( typeof input ) != 'undefined' && input.value )
      
antaltotal += input.value;
  }

  if (
antaltotal<1) {
    
alert('Skriv in önskat antal och klicka sedan på LÄGG I KUNDVAGNEN');
    return 
false;
  }
  $(
'#kundvagn_submit').hide();
  $(
'#kundvagn_submit_loading').show();
  return 
true;




Alla tider är GMT +2. Klockan är nu 05:34.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson