webForumDet fria alternativet

Varna att ingen ändring i ett fält har skett

JavaScript

30 svar · 1 340 visningar · startad av LesPaul

Medlem sedan apr. 200449 inlägg
Frågan#1

Hej alla glada,
jag vil ha en valideringsfunktion som känner av om ett fält har ändrats eller ej. Har fältet inte ändrats när man trycker på submit skall man få en popup ruta med ett meddelande ex "Fältet X har inte ändrats" och 2 val "återgå" och "OK". Trycker man OK fortsätter submit. Har fältet ändrats händer inget och formuläret postas.

Någon som vet hur man löser detta?

Väldigt tacksam för snabbt svar.

Medlem sedan dec. 20025 483 inlägg
#2

Tjena!

<form name="f" onsubmit="return validate(this)">
    <input type="text" name="e" value="värde">
    <input type="submit">
</form>

<script type="text/javascript">
var val = document.forms["f"].elements["e"].value;

function validate(obj){
    if (obj.elements["e"].value == val){
        return confirm("Fältet 'e' har ej ändrats\nVill du ändå fortsätta?");
    }
    return true;
}
</script>
Medlem sedan apr. 200449 inlägg
#3

Tack men, hmm...får det inte att fungera. Det händer ingenting.

Medlem sedan dec. 20025 483 inlägg
#4

Det fungerar om du klistrar in koden som den är. Hur ser din kod?

Medlem sedan apr. 200449 inlägg
#5

Denna på submit:

return validate(this)

Detta i headern:

<SCRIPT LANGUAGE="JavaScript">
<!-- 
var val = document.forms["_ad_kalender"].elements["pub_day"].value;

function validate(obj){
    if (obj.elements["pub_day"].value == val){
        return confirm("Fältet DAG har ej ändrats\nVill du ändå fortsätta?");
    }
    return true;
}
// -->
</SCRIPT>
Medlem sedan dec. 20025 483 inlägg
#6

Lägger du JS-koden i <head>-sektionen, får vi göra så här istället:

<SCRIPT LANGUAGE="JavaScript">
<!-- 
window.onload = function(){
    val = document.forms["_ad_kalender"].elements["pub_day"].value;
}

function validate(obj){
    if (obj.elements["pub_day"].value == val){
        return confirm("Fältet DAG har ej ändrats\nVill du ändå fortsätta?");
    }
    return true;
}
// -->
</SCRIPT>
Medlem sedan apr. 200449 inlägg
#7

Det fungerar inte heller...plus att då slutar andra fält att fungera som är onChange fält. Alltså hämtar värden beroende på val.

Medlem sedan dec. 20025 483 inlägg
#8

Detta fungerar

<head>
<script type="text/javascript">
window.onload = function(){
    val = document.forms["f"].elements["e"].value;
}

function validate(obj){
    if (obj.elements["e"].value == val){
        return confirm("Fältet 'e' har ej ändrats\nVill du ändå fortsätta?");
    }
    return true;
}
</script>
</head>

<form name="f" onsubmit="return validate(this)">
    <input type="text" name="e" value="värde">
    <input type="submit">
</form>

Red./ Hann inte med din redigering. Jag föreslår att du knåpar ihop ett exempel som inte fungerar och förklarar hur du vill att det skall fungera.

Medlem sedan apr. 200449 inlägg
#9

Jag testade scriptet enligt sitt sista recept och det fungerar!

Problemet som uppstår då är att jag har ett annat fält där man väljer ett värde i en dropplist som sedan hämtar nya värden i ett annat fält. Då körs scriptet också och popup-rutan hoppar upp.

Den koden som gör uppdateringen ser ut så här:

_doClick('$Refresh', this, '_self', '#Top')
Medlem sedan dec. 20025 483 inlägg
#10

Och hur ser JS- och formulärkoden ut? Har du en länk till sidan?

Medlem sedan apr. 200449 inlägg
#11

Jag kan inte ge dig sidan för den ligger i ett adminverktyg/intranet. Plattformen är Notes. Del 2 i headern genereras av Notes.

Så här ser Headern ut:

<SCRIPT LANGUAGE="JavaScript">
<!-- 
var val = document.forms["_ad_kalender"].elements["pub_day"].value;

function validate(obj){
    if (obj.elements["pub_day"].value == val){
        return confirm("Fältet DAG har ej ändrats\nVill du ändå fortsätta?");
    }
    return true;
}
// -->
</SCRIPT>

<SCRIPT LANGUAGE="JavaScript">
<!-- 
document._domino_target = "_self";
function _doClick(v, o, t, h) {
  var form = document._ad_Kalender;
  if (form.onsubmit) {
     var retVal = form.onsubmit();
     if (typeof retVal == "boolean" && retVal == false)
       return false;
  }
  var target = document._domino_target;
  if (o.href != null) {
    if (o.target != null)
       target = o.target;
  } else {
    if (t != null)
      target = t;
  }
  form.target = target;
  form.__Click.value = v;
  if (h != null)
    form.action += h;
  form.submit();
  return false;
}
// -->
</SCRIPT>
</HEAD>

Så här ser formulärkoden ut:

<FORM onSubmit="return validate(this)" 
METHOD=post ACTION=/ad_Kalender?OpenForm&Seq=1" 
ENCTYPE="multipart/form-data" NAME="_ad_Kalender">
Medlem sedan dec. 20025 483 inlägg
#12

Vad händer om du stryker följande del:

  if (form.onsubmit) {
     var retVal = form.onsubmit();
     if (typeof retVal == "boolean" && retVal == false)
       return false;
  }

?

Medlem sedan apr. 200449 inlägg
#13

Det är étt problem, jag kan inte det för den genereras automatiskt av Notes.

Men det problemet som uppstår med onChange borde alltså inte uppstå? Jag tämkte just på att det är en window.onload = function() och det är väl vad som händer när man uppdaterar fältet va?

Medlem sedan dec. 20025 483 inlägg
#14

När du anropar _doClick() triggas händelsen onsubmit för formuläret, vilket gör att confirm()-rutan visas. Hur anropas nämnd funktion?

window.onload()-delen som jag lade till har ingenting med detta att göra. Den sparar endast undan värdet i textfältet så vi har något att jämföra med.

Medlem sedan apr. 200449 inlägg
#15

Ok.
Funktionen anropas på dropdown-fältet och ser ut så här:

<SELECT NAME="kal_stad1" onChange="_doClick('$Refresh', this, '_self', '#Top')">
Medlem sedan dec. 20025 483 inlägg
#16

Hm, ok. Vi testar följande då:

<script type="text/javascript">
window.onload = function(){
    val = document.forms["f"].elements["e"].value;
}

var subm = false;

function validate(obj){
    if (!subm){
	subm = !subm;
	return true;
    }
    if (obj.elements["e"].value == val){
        return confirm("Fältet 'e' har ej ändrats\nVill du ändå fortsätta?");
    }
    return true;
}
</script>

Sedan i din submitknapp för formuläret:

<form>
    ...
    <input type="submit" onclick="subm = true">
</form>
Medlem sedan apr. 200449 inlägg
#17

Ha..ja du. Notes funkar inte som andra program riktig. Det ligger diverse funktioner på submitknappen, sätter ett fält osv så den ignorerar min onclick-rutin och skapar en egen som ser ut så här:

<INPUT TYPE=button VALUE="Spara" onClick="return _doClick('1737f45085714fdcc1257074004a9ce2/$Body/0.88C8', this, null)">

Tror nästan att lösningen måste vara i form-delen.

Medlem sedan apr. 200449 inlägg
#18

Kan man få den att inte trigga submit när man gör onChange så löser det sig eller?

Medlem sedan dec. 20025 483 inlägg
#19

Så du kan inte få den att se ut enligt

<INPUT TYPE=button VALUE="Spara" onClick="subm=true; return _doClick('1737f45085714fdcc1257074004a9ce2/$Body/0.88C8', this, null)">

LesPaul skrev:

Kan man få den att inte trigga submit när man gör onChange så löser det sig eller?

onchange har du ju för <select>. Eller menar du någonting annat?

Medlem sedan apr. 200449 inlägg
#20

Ja, ursäkta mig. Jag menar denna _doClick('$Refresh', this, '_self', '#Top')

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)