2016-09-21 36 views
0

只是爲了好玩我試圖用javascript做一個小遊戲,我很新的編程,所以這是更多的測試我可以做什麼。Javascript文檔寫入按鈕功能由另一個功能使用的功能不工作

我有這種情況發生時,我按下一個按鈕,這並不正確地作出新的按鈕出現,但按這個新按鈕

function clickStart(){ 
document.write("<input type='button' value='attack!' onClick='clickAttack();' /"); 

時,它不會reconize它下面的功能函數如下內其他函數看起來是這樣的

function clickAttack(){ 
    if(heroHealth >= 0 && monsterHealth >= 0){ 

這個函數在關閉第一個函數後是正確的。

控制檯給我下面的

ReferenceError: clickAttack is not defined 

我不知道我怎麼能解決這個問題。

幫助將appriciated

+0

是不是你缺少輸入HTML元素的右括號? –

+0

定義'clickAttack'在哪裏? – evolutionxbox

+0

你在哪裏定義了這些功能。如果在.js文件中,則檢查是否加載了.js文件。 – Knu8

回答

6

這其中的原因有很多不使用onxyz -attribute式的事件處理程序之一:他們需要你在他們使用任何功能是全局。全局是壞事™。你的函數顯然不是全局變量,這是一件好事。

另外,document.write在2016年(或2006年)的網站開發中基本沒有地位。相反,使用DOM。這樣做,你的情況的一個優點是,它意味着clickAttack不再是一個全球性的:

function clickStart() { 
    var input = document.createElement("input"); 
    input.type = "button"; 
    input.value = "attack!"; 
    input.addEventListener("click", clickAttack, false); 
    document.body.appendChild(input); 
} 
+0

啊,是的,這是有效的,謝謝!我意識到document.write不是真的被使用了,但它是我知道要寫入頁​​面的唯一東西,但使用HTML DOM更好 – Zerozapper

-1

你好,我建議你使用jQuery庫。代碼對你來說很簡單。

我對你的解決方案是here in jsFiddle

我用自己invoke function其中初始化函數註冊event listener.on()點擊此調用攻擊功能

如果您有任何疑問,請隨時與我聯繫。

JS代碼:

(function(){ 
    'use strict'; 

    function attack() { 
    $('#logger').append('Attacked!<br>'); 
    }; 

    function init() { 
     $('#attackBtn').on('click', function() { 
     attack(); 
    }); 
    }; 

    init(); 
})(); 
+0

請評論爲什麼-1 – Franky238

+2

FWIW,我看到兩個可能的原因:1。這並沒有回答OP的代碼不起作用的問題。 2. [「使用jQuery」不是對非jQuery問題的有效答案。](http://meta.stackexchange.com/questions/45176/when-is-use-jquery-not-a-valid-answer-一個JavaScript的問題)這是至多,一個評論。 –

+0

jQuery只是建議......他寫道,他是初學者,所以我給他建議。其次爲什麼他的功能不能正常工作就解決了。該代碼告訴他應該包含函數攻擊,因爲有參考錯誤。所以這個錯誤告訴他函數不包含在代碼中...... – Franky238

0

或者你可以使用jQuery這樣。

$(document).ready(function(){ 
    $('body').on('click', '.myButton' , clickAttack);     
}); 


function clickStart(){ 
     $("body").append($("<input type='button' value='attack!' class='myButton'/>")); 
     } 
function clickAttack(){ 
     alert("hello"); 
     } 



<input type='button' value='add!' onClick='clickStart();' />