Вы можете обернуть обработчик в другую функцию.
button.addEventListener("click", function(event) {
createRepeatStage(x);
});
Значение x будет сохранено закрытием .
Обратите внимание, я использовалaddEventListener
вместо setAttribute
.
function addValue(x){
var button = document.createElement( "input" );
button.setAttribute("type", "submit");
button.setAttribute("src", "images/repeatStageIcon.png");
button.setAttribute("class", "option-image");
button.setAttribute("title", "Repeat Current Stage!");
//HOW TO PASS X AS AN ONCLICK ATTRIBUTE?
button.addEventListener("click", function(event) {
createRepeatStage(x);
});
var p = document.getElementById("myDiv");
p.appendChild(button);
}
function createRepeatStage( thisX ){
alert(thisX);
}
addValue(6);
<html>
<body>
<div id="myDiv"></div>
</body>
</html>
Использование bind
Если по какой-то причине вы против включения обработчика в функцию, вы можете воспользоваться bind .
function addValue(x){
var button = document.createElement( "input" );
button.setAttribute("type", "submit");
button.setAttribute("src", "images/repeatStageIcon.png");
button.setAttribute("class", "option-image");
button.setAttribute("title", "Repeat Current Stage!");
//HOW TO PASS X AS AN ONCLICK ATTRIBUTE?
button.addEventListener("click", createRepeatStage.bind(null, x));
var p = document.getElementById("myDiv");
p.appendChild(button);
}
function createRepeatStage( thisX ){
alert(thisX);
}
addValue(6);
<html>
<body>
<div id="myDiv"></div>
</body>
</html>