Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

onChange event is not working in color type input

I search a lot and find answers on Stack Overflow but all in vain, nothing is working for me. I want to get the color value when color is changed in input field.

Here is my code, please check this why it's not working.

 <input type="color" id="bgcolor" value="#ffffff" onchange="test()" />

Here is the JavaScript code:

 function test(){
    console.log('working.....'); 
 }

This function is not working, if you replace onChange with onclick it's working fine, but why not for onChange?

like image 371
Azeem Haider Avatar asked Sep 01 '16 07:09

Azeem Haider


People also ask

How to use input event instead of onchange event?

The onchange event is not working in Input type color (input [type="color"]). So we'll use input event instead of onchange to apply the changes. First, we will fetch the Input element by ID. Next, we will trigger the event. The in-built input type color will populate a popup like another browser window/iframe.

What happens when you change the color of the input type?

The in-built input type color will populate a popup like another browser window/iframe. When we change the color it will not reflect immidiatly using the onchange event listner.

Why is my jQuery color input not working in different browsers?

This problem some people are having with inconsistent behaviour in different browsers happens because you're using the "onchange" event ("change" in jQuery), which is not the appropriate event for color inputs (that's why it sometimes works and it sometimes doesn't, especially on Mac OS X).

When does the onchange event occur on an element?

The onchange event occurs when the value of an element has been changed. For radiobuttons and checkboxes, the onchange event occurs when the checked state has been changed.


3 Answers

I get the same behavior both with Chrome and Firefox on Windows and it only occurs with pure black, pure white, o any color very close to either one of them.

If you look at the Color picker you'll notice that the rgb values don't change when you move the cursor in the main square (they do if you use the vertical slider to the right, but that's not what the average user would tend to do).

enter image description here

The same behavior occurs with other applications using the same color picker, for instance MSpaint or Tkinter's tkColorChooser.askcolor(). I assume this is Window's default color picker since "color" has the British English spelling "colour", that's my default language choice.

To fix this, just use any color that's not #ffffff or #000000 (or close) as your start color.

<label for="doesntWork1">doesn't work</label> <input type="color" id="doesntWork1" value="#ffffff" onchange="alert(this.value);" />
<p>
<label for="doesntWork2">doesn't work</label> <input type="color" id="doesntWork2" value="#000000" onchange="alert(this.value);" />
<p>
<label for="works1">works</label> <input type="color" id="works1" value="#fdffff" onchange="alert(this.value);" />
<p>
<label for="works2">works</label> <input type="color" id="works2" value="#000002" onchange="alert(this.value);" />
like image 59
user2314737 Avatar answered Oct 17 '22 01:10

user2314737


This problem some people are having with inconsistent behaviour in different browsers happens because you're using the onchange event (change in jQuery), which is not the appropriate event for color inputs (that's why it sometimes works and it sometimes doesn't, especially on Mac OS X).

You should use oninput (or input when using jQuery), which works fine in all browsers and platforms.

$('#bgcolor').on('input',
    function() {
        console.log($(this).val());
    }
);
like image 41
OMA Avatar answered Oct 17 '22 01:10

OMA


Hope this helps you .

<!DOCTYPE html>
<html lang="en">
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    </head>
    <body>
        <input type="color" id="bgcolor" value="#ffffff" />
    </body>
    <script>
        $(document).on("change" , "#bgcolor" , function(){
            alert($(this).val());
        });
    </script>
</html>

$(document).on("change" , "#bgcolor" , function(){
  alert($(this).val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 <input type="color" id="bgcolor" value="#ffffff" />
like image 3
Punit Gajjar Avatar answered Oct 17 '22 01:10

Punit Gajjar