Saturday, May 25, 2024
 Popular · Latest · Hot · Upcoming
110
rated 0 times [  114] [ 4]  / answers: 1 / hits: 7158  / 11 Years ago, tue, december 3, 2013, 12:00:00

Thank you for taking the time for reading my question.



A range input element in HTML (Slider) fires an onchange -event, in which the content of a span element gets updated with the current value of the input element.



Somehow, the first change made to the input element doesn't fire the onchange event. When an 'onclick' event is used, it does fire.



Here's the code, HTML first:



<div>

<input id=main_options_plug1_lengthPE_input type=range step=10 value=0 max=200 min=0 onchange=setOpenEndPELength('plug1');></input>
<span id=main_options_plug1_lengthPE_value> … </span>

</div>


And now JavaScript:



function setOpenEndPELength(plug)
{
if (plug == plug1 || plug == plug2)
{
var slider = document.getElementById(main_options_ + plug + _lengthPE_input);
var span = document.getElementById(main_options_ + plug + _lengthPE_value);

span.innerHTML = slider.value + mm;
}
}


I created a JSFiddle, so you can try it yourself.



I didn't find an answer to this question on stackoverflow so far, any questions i found were about onchange event don't firing at all. In this case, it's only the first change that doesn't work.



Hope someone knows the answer. Any help is greatly appreciated, thanks in advance.


More From » html

 Answers
2

If I understand the question correctly, the problem is that on Firefox, the onchange handler is not executed when you press down mouse button when the cursor is on the button of the slider and move the mouse. It is executed only after you release the mouse button after such a move.



This seems to be the correct behavior (though some other browsers don’t comply), since HTML5 CR says about the change event: “if the element does not have an activation behavior defined but uses a user interface that involves an explicit commit action, then any time the user commits a change to the element's value or list of selected files, the user agent must queue a task to fire a simple event that bubbles named change at the input element.”



That’s a bit complicated formulation, but it is followed by a clarifying example: “A third example of a user interface with a commit action would be a Range controls that use a slider. While the user is dragging the control's knob, input events would fire whenever the position changed, whereas the change event would only fire when the user let go of the knob, committing to a specific value.”



The conclusion is that in this case, you should use the oninput attribute instead of onchange. In practice, onmousemove works too, but oninput is better, since it can be expected to work with input methods that do not use a mouse (whatever they might be, e.g. control by voice).


[#49895] Monday, December 2, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
gonzaloulyssess

Total Points: 225
Total Questions: 114
Total Answers: 112

Location: Iraq
Member since Fri, Jun 5, 2020
4 Years ago
;