Mam pole tekstowe i wartość wpisaną w nim podczas ładowania strony. Teraz, jeśli użytkownik zmienia coś w polu tekstowym, chcę uzyskać zmienioną wartość (nową wartość) i starą wartość, ale kiedy robię ELEMENT.value, to podaje tylko zmienioną wartość
jakieś sugestie, aby uzyskać starą wartość?
poniżej jest mój kod
<head>
<script type="text/javascript">
function onChangeTest(changeVal) {
alert("Value is " + changeVal.value);
}
</script>
</head>
<body>
<form>
<div>
<input type="text" id="test" value ="ABS" onchange="onChangeTest(this)">
</div>
</form>
</body>
</html>
Z góry dziękuję
javascript
html
validation
CFUser
źródło
źródło
Musisz ręcznie zapisać starą wartość. Można to przechowywać na wiele różnych sposobów. Możesz użyć obiektu javascript do przechowywania wartości dla każdego pola tekstowego lub możesz użyć ukrytego pola (nie polecam tego - zbyt ciężki HTML) lub możesz użyć właściwości expando w samym polu tekstowym, na przykład:
<input type="text" onfocus="this.oldvalue = this.value;" onchange="onChangeTest(this);this.oldvalue = this.value;" />
Wtedy Twoja funkcja javascript do obsługi zmiany wygląda następująco:
<script type="text/javascript"> function onChangeTest(textbox) { alert("Value is " + textbox.value + "\n" + "Old Value is " + textbox.oldvalue); } </script>
źródło
Sugerowałbym:
function onChange(field){ field.old=field.recent; field.recent=field.value; //we have available old value here; }
źródło
Należy używać atrybutów danych HTML5. Możesz tworzyć własne atrybuty i zapisywać w nich różne wartości.
źródło
Brudną sztuczką, której czasami używam, jest ukrywanie zmiennych w atrybucie `` nazwa '' (którego zwykle nie używam do innych celów):
select onFocus=(this.name=this.value) onChange=someFunction(this.name,this.value)><option...
Nieoczekiwanie następuje przesłanie zarówno starej, jak i nowej wartości
someFunction(oldValue,newValue)
źródło
Nie jestem pewien, ale może ta logika zadziała.
var d = 10; var prevDate = ""; var x = 0; var oldVal = ""; var func = function (d) { if (x == 0 && d != prevDate && prevDate == "") { oldVal = d; prevDate = d; } else if (x == 1 && prevDate != d) { oldVal = prevDate; prevDate = d; } console.log(oldVal); x = 1; }; /* ============================================ Try: func(2); func(3); func(4); */
źródło
Możesz to zrobić: dodaj atrybut oldvalue do elementu html, dodaj set oldvalue po kliknięciu przez użytkownika. Następnie zdarzenie onchange używa wartości oldvalue.
<input type="text" id="test" value ="ABS" onchange="onChangeTest(this)" onclick="setoldvalue(this)" oldvalue=""> <script> function setoldvalue(element){ element.setAttribute("oldvalue",this.value); } function onChangeTest(element){ element.setAttribute("value",this.getAttribute("oldvalue")); } </script>
źródło
Może możesz zapisać poprzednią wartość pola tekstowego w ukrytym polu tekstowym. Następnie możesz pobrać pierwszą wartość z ukrytego, a ostatnią wartość z samego pola tekstowego. Alternatywa związana z tym, w zdarzeniu onfocus twojego pola tekstowego ustaw wartość twojego pola tekstowego na ukryte pole, a podczas zdarzenia onchange odczytaj poprzednią wartość.
źródło
Może możesz spróbować zapisać starą wartość za pomocą zdarzenia „onfocus”, a następnie porównać ją z nową wartością ze zdarzeniem „onfocus”.
źródło