2016-09-21 8 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 

を与えます。彼らはあなたがそれらに使用するすべての機能がグローバルであることが必要です。

ヘルプは、これはonxyz -attributeスタイルのイベントハンドラを使用しない多くの理由の一つである

+0

入力html要素の閉じ括弧がありません。 –

+0

'clickAttack'はどこに定義されていますか? – evolutionxbox

+0

ここでは、これらの関数を定義しました。 .jsファイル内にある場合は、.jsファイルがロードされているかどうかを確認します。あなたのクリックの攻撃は – Knu8

答えて

6

をにappriciatedされます。グローバルはBad Things™です。あなたの機能は明らかにグローバルではありません。これはGood Thing™です。

別に、document.writeは2016(または2006)でのWeb開発における基本的に場所がありません。代わりに、DOMを使用します。

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ライブラリを使用することをお勧めします、あなたのケースでそれを行うことの一つの利点は、それがグローバルでなければならなくなっclickAttackを意味していることではありません。コードはあなたのために簡単になります。あなたのための

私のソリューションは、here in jsFiddle

である私は、あなたが何か質問は私に連絡すること自由に感じている場合はinit関数がevent listener.on()クリックして、このコール攻撃機能

を登録自己invoke functionを使用。

JSコード:

(function(){ 
    'use strict'; 

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

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

    init(); 
})(); 
+0

理由-1をご記入ください – Franky238

+2

FWIW、これは、OPのコードが機能しない理由についての質問には答えません。 2. ["jQueryを使用する"は、非jQueryの質問に対する有効な回答ではありません。](http://meta.stackexchange.com/questions/45176/when-is-use-jquery-not-a-valid-answer- to-a-javascript-question)これは、たいていの場合、コメントです。 –

+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();' /> 
関連する問題