tags:

views:

60

answers:

6

Hi,

I'm creating a button dynamically using JavaScript and at the same time assigning attributes such as 'ID', 'type' etc and also 'onclick' in order to trigger a function.

All works fine apart from the assignment of the 'onclick'. When clicked, the button is not triggering the function as it is supposed to. the function I'm trying to run is 'navigate(-1)' as seen below.

Where am I going wrong?

Here's my code:

function loadNavigation() {
var backButton;
backButton = document.createElement('input');
backButton.ID = 'backButton';
backButton.type = 'button';
backButton.value='Back';
backButton.onclick = 'navigate(-1)';
document.body.appendChild(backButton);
}
+3  A: 

you are assigning text to the onclick, try assigning a function.

backButton.onclick = function(){navigate(-1);};
Jason w
+1  A: 

Use a function instead of a string. For example,

backButton.onclick = function () { navigate(-1); };
Eli Grey
+2  A: 

You have to assign a function, not a string.

backButton.onclick = function wastefulDuplicationOfBackButton () {
    navigate(-1);
}
David Dorward
+1 for function name
jessegavin
@jessegavin, well, in IE you end up with *two* function objects due a serious bug on the JScript implementation of [Named Function Expressions](http://yura.thinkweb2.com/named-function-expressions/), not a such good thing :(...
CMS
Goes to show that you can do this for years and still learn new things … mostly new problems with IE, but new things nonetheless!
David Dorward
+1  A: 

You should assign a function, not a string:

//...
backButton.onclick = function () {
  navigate(-1);
};
//...
CMS
A: 
backButton.onclick = function() { navigate(-1); }
Khnle
+2  A: 

As the other said you should assign a function.

Just wanted to point out that in this case you want to pass a value so you need to assign an anonymous function (or a named function defined inline) like

button.onclick = function() {otherfunction(parameter)};

If the function you want to assign does NOT require a parameter you can use it directly

button.onclick = otherfunction;

Note that there is no parenthesis in this case

button.onclick = otherfunction(); // this doesn't work

won't work as it will call otherfunction as soon as it is parsed

nico