webForumDet fria alternativet

Lägga till variabel till det här scriptet?

7 svar · 490 visningar · startad av bassebhu

bassebhuMedlem sedan nov. 20016 480 inlägg
#1

Tjaba!

Jag sitter med ett javascript/ajaxfunktion som jag skulle vilja utöka med en variabel. Jag är nära men det är något litet som ska till...

Funktionen gör så att formulärfält valideras medan man fyller i dem och det jag är ute efter är att använda samma funktion till alla fält, men skriva ut resultatet i olika span bredvid fälten. De fetmarkerade orden vill jag byta ut till variabler som hämtas från varje formulärfält. Jag har lyckats skicka med värdet till validate_form() än så länge, men resterande funktioner måste också få ta del av värdet.

Det första stycket är Ajax-koden, det andra javascriptet och det tredje ett fält som ska valideras

/* AJAX Framework */
function ajaxHelper(functionName, additionalArgs) {
  var xmlHttp;
  // Firefox, Opera 8.0+, Safari, SeaMonkey
  try {
    xmlHttp=new XMLHttpRequest();
  }
  catch (e) {
    // Internet Explorer
    try {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
      try {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e) {
        alert("Sorry, your browser does not support AJAX.");
        return false;
      }
    }
  }
 
  xmlHttp.onreadystatechange=function() {
    //The request is complete == state 4
    if (xmlHttp.readyState==4) {
      var response=xmlHttp.responseText;
      //Send reponse to _ajax hook of passed function name
      eval(functionName + "_ajax" + '(\'' + response + '\')');
    }
  }
 
  //Get request string from _setup hook of passed function name
  if (additionalArgs !== undefined && additionalArgs.length > 0) {
    var requestString = eval(functionName+"_init" + '(' + additionalArgs + ')');
  }
  else {
    var requestString = eval(functionName+"_init" + '()');
  } 
 
  if (requestString) {
    xmlHttp.open("GET", requestString, true);
    xmlHttp.send(null);
  }
}

function validate_form_init() {
  var field = document.getElementById('[b]namn[/b]');
  return 'validate_form.php?[b]namn[/b]=' + field.value;
}
function validate_form_ajax(results) {
  var results_span = document.getElementById('results_[b]namn[/b]');
  results_span.innerHTML = results;
}
function validate_form(form_field) {
  var field = document.getElementById(form_field);
  if (field.value.length > 0) {
    [red]ajaxHelper('validate_form');[/red]
  }
  else {
    //clear results field 
    var results_span = document.getElementById('results_' + form_field);
    results_span.innerHTML = '';
  }
}
<input type="text" name="namn" id="namn" onKeyUp="validate_form('namn');" /><span id="results_namn"></span>

Allt fungerar i nuvarande läget, men jag vill kunna applicera samma sak på flera fält och bara skicka med ett annat värde i validate_form(). Det rödmarkerade är den första delen där jag antar att man måste få med min variabel.

Grymt tack för hjälpen!

bassebhuMedlem sedan nov. 20016 480 inlägg
#2

Ingen som har idéer? Det är ju troligen bara nån liten pyttesak som ska in nånstans. Kan det blåmarkerade vara i rätt riktning? Det funkar inte, men jag antar att man måste pilla i första kodstycket jag skickade också.

function validate_form_init([blue]form_field[/blue]) {
  var field = document.getElementById([blue]form_field[/blue]);
  return 'validate_form.php?[blue]' + form_field + '[/blue]=' + field.value;
}
function validate_form_ajax(results,[blue]form_field[/blue]) {
  var results_span = document.getElementById('results_'[blue] + form_field[/blue]);
  results_span.innerHTML = results;
}
function validate_form(form_field) {
  var field = document.getElementById(form_field);
  if (field.value.length > 0) {
    ajaxHelper('validate_form'[blue],form_field[/blue]);
  }
  else {
    //clear results field 
    var results_span = document.getElementById('results_' + form_field);
    results_span.innerHTML = '';
  }
}

Grymt tack!

bassebhuMedlem sedan nov. 20016 480 inlägg
#3

Vore jättesnällt om någon kunde kika lite :)

bassebhuMedlem sedan nov. 20016 480 inlägg
#4

Några idéer?

bassebhuMedlem sedan nov. 20016 480 inlägg
#5

bump ;)

bassebhuMedlem sedan nov. 20016 480 inlägg
#6

Jag kan härmed titulera mig JavaScript-kung också! Det tog ett tag, men med snabelns tips om felkonsollen i eldräven så lyckades jag efter bra mycket luskande.

/* AJAX Framework */
function ajaxHelper(functionName, additionalArgs) {
  var xmlHttp;
  // Firefox, Opera 8.0+, Safari, SeaMonkey
  try {
    xmlHttp=new XMLHttpRequest();
  }
  catch (e) {
    // Internet Explorer
    try {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
      try {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e) {
        alert("Sorry, your browser does not support AJAX.");
        return false;
      }
    }
  }
 
  xmlHttp.onreadystatechange=function() {
    //The request is complete == state 4
    if (xmlHttp.readyState==4) {
      var response=xmlHttp.responseText;
      //Send reponse to _ajax hook of passed function name
      eval(functionName + "_ajax" + '(\'' + response + '\',\'' + additionalArgs + '\')');
    }
  }
 
  //Get request string from _setup hook of passed function name
  if (additionalArgs !== undefined && additionalArgs.length > 0) {
    var requestString = eval(functionName+"_init" + '(\'' + additionalArgs + '\')');
  }
  else {
    var requestString = eval(functionName+"_init" + '()');
  } 
 
  if (requestString) {
    xmlHttp.open("GET", requestString, true);
    xmlHttp.send(null);
  }
}
function validate_form_init(form_field) {
  var field = document.getElementById(form_field);
  return 'validate_form.php?' + form_field + '=' + field.value;
}
function validate_form_ajax(results,form_field) {
  var results_span = document.getElementById('results_' + form_field);
  results_span.innerHTML = results;
}
function validate_form(form_field,argument) {
  var field = document.getElementById(form_field);
  if(field.value.length > 0) {
    ajaxHelper('validate_form',form_field);
  } else {
    //clear results field
    var results_span = document.getElementById('results_' + form_field);
    results_span.innerHTML = '';
  }

}
colioneMedlem sedan juni 20014 421 inlägg
#7

Yikes, var har du fått det där ajax frameworket från? Det där att kalla funktioner genom strängkonkatering och eval är helt onödig. Du borde snegla på att försöka löse det med apply() eller liknande. Ytterligare ett tips är att använda dig av encodeURIComponent() när du bygger dina querystrings:

return 'validate_form.php?namn=' + encodeURIComponent(field.value);

Jag ber om ursäkt för att jag inte har sett din tråd tidigare. :)

bassebhuMedlem sedan nov. 20016 480 inlägg
#8

colione skrev:

Yikes, var har du fått det där ajax frameworket från? Det där att kalla funktioner genom strängkonkatering och eval är helt onödig. Du borde snegla på att försöka löse det med apply() eller liknande. Ytterligare ett tips är att använda dig av encodeURIComponent() när du bygger dina querystrings:

return 'validate_form.php?namn=' + encodeURIComponent(field.value);

Jag ber om ursäkt för att jag inte har sett din tråd tidigare. :)

här har jag fått det ifrån:) Jag har ingen aning om det är bra eller inte, men jag fick det att funka! trots att jag numera är javascript-kung så kanske jag ska kolla in apply en smula också.

146 ms totalt · 3 externa anrop · v20260731065814-full.cf67ef55
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)