js onclick for newly created element

joasisk

Hi I am trying to create a simple colorpicker for my project. It should dispalay DIV vith colored SPANS and each span should onclick call my function -pickColor()- with its onwn value.

The problem is that, after clicking on any Span my function is simply called with last walue from my array instead of the coresponding one. Any idea how to correct it?

here is my code

var colors = [ "303030", "777777", "da0025", "f01800", "ff4300", "fd6c05", "feab07", "ffc91e", "93c900", "54c300", "00ab62", "00c3c4", "009bf0", "006afe", "3f00dd", "9025ff", "ff3ec2", "fe0b6b"];

//color picker var picker;

function createPicker(){
//create picker wrapper
picker = document.createElement('div');
picker.id = "colorPicker";
picker.style.display = "none"; // initialy invisible !
picker.style.margin = "0";
picker.style.padding = "0.5em";
picker.style.backgroundColor = "rgb(30,30,30)";
//create picker color options
var newColor;
for (var i = colors.length - 1; i >= 0; i--) {
    newColor = document.createElement('span');
    newColor.id = colors[i];
    //set style for color option
    newColor.style.display = "inline-block";
    newColor.style.width = "50px";
    newColor.style.height = "50px";
    newColor.style.margin = "0";
    newColor.style.padding = "0";
    newColor.style.backgroundColor = "#"+colors[i];
    //add onclick function

    newColor.addEventListener("click", function f(){pickColor( colors[i] )}, true);

    //append option
    picker.appendChild(newColor);
};
//append colorPicker to file
document.getElementById('here').appendChild(picker); // value must be set to the parent elements id !
}

function displayPicker(){
picker.style.display = "inline-block";
}

function pickColor(id){
//set value
console.log(id);
var input = document.getElementById('color'); // must be the 'input' elements id that we want to set !
//console.log(input);
input.value = id;
// hide picker
picker.style.display = "none";
}
jyrkim

After looking at Teemu's recommend link (thanks), I realized that it gets quite tricky if you use function in addEventListener method call within a loop.

So how about doing this way, without any parameters:

newColor.addEventListener("click", pickColor, true);

In the pickColor function you can access the id in the following way:

function pickColor(){

   var id = this.id;
   //more code below

}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

DOM: Delete newly created 'article' element with newly created delete button within onclick event?

From Dev

JS: How to assign an ID to a newly created HTML element

From Dev

CSS transition on newly created element

From Dev

Animate Newly Created List Element

From Dev

Animate Newly Created List Element

From Dev

Add newly created element to Angular template element

From Dev

onclick element for an element that is not created yet

From Dev

Bind Angularjs to newly created html element dynamically

From Dev

Get the newly created element as a jQuery object

From Dev

Click event on newly created UL LI element

From Dev

Replace element with outerHTML and immediately access the newly created element

From Dev

Styling element created in js

From Dev

How to bind events to a newly created SVG element using jQuery?

From Dev

How to pass data to newly created element in dart polymer?

From Dev

jQuery - Event delegation only targeting first newly-created element

From Dev

How do you add a list id to a newly created HTML element?

From Dev

How to use jQuery to change attributes of a newly created element

From Dev

associate number in number field with the number of newly created js div's

From Dev

ember.js, how to set relationships in newly created records

From Dev

fseek a newly created file

From Dev

Select an html element created with JS in JS

From Dev

Can't Access Dynamically Created Audio Element onClick in Chrome with jQuery

From Dev

onclick function does not get registered in created DOM element's outerHTML

From Dev

How to add event to element created with js?

From Dev

JS: Can't remove created Element in IE

From Dev

laravel download a newly created xmlfile

From Dev

Saving newly created objects in java

From Dev

Insert date in newly created table

From Dev

Use a newly-created column

Related Related

  1. 1

    DOM: Delete newly created 'article' element with newly created delete button within onclick event?

  2. 2

    JS: How to assign an ID to a newly created HTML element

  3. 3

    CSS transition on newly created element

  4. 4

    Animate Newly Created List Element

  5. 5

    Animate Newly Created List Element

  6. 6

    Add newly created element to Angular template element

  7. 7

    onclick element for an element that is not created yet

  8. 8

    Bind Angularjs to newly created html element dynamically

  9. 9

    Get the newly created element as a jQuery object

  10. 10

    Click event on newly created UL LI element

  11. 11

    Replace element with outerHTML and immediately access the newly created element

  12. 12

    Styling element created in js

  13. 13

    How to bind events to a newly created SVG element using jQuery?

  14. 14

    How to pass data to newly created element in dart polymer?

  15. 15

    jQuery - Event delegation only targeting first newly-created element

  16. 16

    How do you add a list id to a newly created HTML element?

  17. 17

    How to use jQuery to change attributes of a newly created element

  18. 18

    associate number in number field with the number of newly created js div's

  19. 19

    ember.js, how to set relationships in newly created records

  20. 20

    fseek a newly created file

  21. 21

    Select an html element created with JS in JS

  22. 22

    Can't Access Dynamically Created Audio Element onClick in Chrome with jQuery

  23. 23

    onclick function does not get registered in created DOM element's outerHTML

  24. 24

    How to add event to element created with js?

  25. 25

    JS: Can't remove created Element in IE

  26. 26

    laravel download a newly created xmlfile

  27. 27

    Saving newly created objects in java

  28. 28

    Insert date in newly created table

  29. 29

    Use a newly-created column

HotTag

Archive