2016-10-12 4 views
0

私はボタンをクリックして新しいテキスト/と要素をページに追加できるようにしようとしていますが、機能していません。理由を調べようとしましたが、正しい。しかし、まだそれは、コメントで述べたよう@nnnnnnボタンはHTMLを変更していませんか?

Recipes = {}; 
 

 
function Recipe(name, origin, auther, ingredients, directions) { 
 
    this.name = name; 
 
    this.origin = origin; 
 
    this.author = auther; 
 
    this.ingredients = ingredients; 
 
    this.directions = directions; 
 
}; 
 

 
Recipe.prototype.printRecipe = function(){ 
 
    var text = ""; 
 
    for (var i=0; i < Object.keys(this).length; i++) { 
 
     text += "<br/>" + this[Object.keys(this)[i]]; 
 
    }; 
 
    return text; 
 
}; 
 

 
var Salad = new Recipe("Fruit Salad", "Unknown", "Unknown", "Apples, Bananas, Berries, Milk, Sugar, Dry fruits", "<ul><li>sdasds</li></ul>"); 
 

 

 
function AddRecipe(){ 
 
    document.getElementById("text").innerHTML = Salad.printRecipe(); 
 
};
<p id="text"> 
 
    To be vanished by javascript 
 
</p> 
 

 
<button onclick="AddRecipe()">Display Recipe</button>

+0

何が問題なのですか? – Rayon

+0

'document.getElementById(" text ")。innerHTML = Salad.printRecipe();'期待どおりの結果が得られましたか? – Rayon

+0

コードはどのように整理されていますか? –

答えて

0

を働いていないJSFiddleのデフォルトは、あなたはonloadイベントハンドラ内にコードを配置します。 Recipesを除くすべてがそのスコープ内で定義されています。 onloadハンドラが終了すると、そのスコープの外にアクセス可能などこかに格納しない限り、そのスコープにローカルなものはすべて失われます。

簡単な修正のために、あなたのコードの下でこれを追加します。これは、グローバルスコープでAddRecipeを置く

window.AddRecipe = AddRecipe; 

、ボタンのonclickイベントにそれがアクセスできます。 AddRecipeの閉鎖のため、それ以外のものから隠されていても、それにあったものはすべてAddRecipeにアクセスできます。

+0

閉鎖とは何ですか? – buoyantair

+0

* "レシピ"以外のものはすべてそのスコープで定義されています "* - ' Recipes' *は 'var'(ローカルにもなるでしょう)または' window'のプロパティとして宣言すべきですグローバルな)ので、そのスコープは明示的に設定されています... – nnnnnn

+0

@UdayKiran私はそれ自身完全にはっきりしていません。クロージャは、同じスコープで作成された関数に関連付けられたローカルオブジェクト(変数、その他の関数)のコレクションと考えるのが有益です。それらの詳細については、[こちら](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures)を参照してください。 – Ouroborus

関連する問題