如何将变量值从一个函数传递给另一个函数

d_mun

我正在上JavaScript课,这是我的最后一个项目。因此,我是javascript新手。

该应用程序要求用户提供要创建的“盒子”的名称,颜色和数量。创建它们之后,用户可以单击一个框以获取一条消息,指出其ID,名称,颜色以及该框的顶部位置(XPOS)和左侧位置(YPOS)。

我现在得到的一切都是正确的,除了XPOS和YPOS出现未定义。如果我将display()函数中的this.xpos和this.ypos替换为xpos和ypos,我将获得创建的最后一个框的值。

在我(未经训练的人)看来,ID和XPOS,YPOS的创建是相似的,并且应该可以相同地工作。那么,为什么ID正确显示而不显示2个位置变量?任何帮助,将不胜感激。

var name;
var id;
var color;
var amount;
var xpos = 0;
var ypos = 0;

function Box(id, name, color, xpos, ypos) {     //element constructor function
   this.id = id;
   this.name = name;
   this.color = color;
   this.xpos = xpos;
   this.ypos = ypos;
}
var box
var boxes = [];
var counter = 0;

window.onload = init;

function init() {
   var generateButton = document.getElementById("generateButton");
   generateButton.onclick = generate;

   var clearButton = document.getElementById("clearButton");
   clearButton.onclick = clear;
}

function generate() {
   var dataForm = document.forms.data;              //create var for the form collection
   var nameInput = document.getElementById("name");     //get text input for name of Amazing Boxes
   name = nameInput.value;
   if(name == null || name == "") {             //check to see if the input box is empty
         alert("***Please enter valid text for a name***"); //if it is empty, alert user
         nameInput.focus();
         return;
      }  

   var colorList = dataForm.elements.color;         //get color choice for Amazing Boxes
   color = colorList.value;

   var radioPick = dataForm.elements.amount;            //get the choice for number of Amazing Boxes
      for(var i = 0; i < radioPick.length; i++) {
         if (radioPick[i].checked) {
         amount = radioPick[i].value;
         }
      }      
         if(amount == null || amount == "") {                   //test to make sure the user has checked an amount
            alert("***Please choose an amount of boxes to be generated***");
            return false;
         }
         else {   
            while(amount > 0) {
               var sceneDiv = document.getElementById("scene");
               xpos = Math.floor(Math.random() * (sceneDiv.offsetWidth-101));   //get a random number for box position
               ypos = Math.floor(Math.random() * (sceneDiv.offsetHeight-101));  //get a random number for box position
               id = counter;
               var div = document.createElement("div");             //create new div element
               div.setAttribute("id", id);                  //give the new div an id = to the var id
               div.setAttribute("class", "box");                    //give the new div a class = to box
               div.innerText = name;                        //set text on box to the name
               sceneDiv.appendChild(div);                       //make the new div a child element of the scene div
               div.style.left = xpos + "px";
               div.style.top = ypos + "px";
               div.style.backgroundColor = color;
               div.onclick = display;
               counter ++;                          //increment counter var to get different box ids
               amount--;
            }
         }
         dataForm.reset();
         nameInput.focus();
}

function display() {
   alert("The ID of this box is " + this.id + " and it is named " + name + ".  It's color is " + color +
          " and is located at " + this.xpos + " and " + this.ypos + ".");
}
大室克幸

由于以下代码:

div.onclick = display

display函数div在响应click事件时对象的上下文中运行此时,this.id属性(think div.id)包含您分配给它的值。但是其他值:this.xpos并且this.ypos不包含您打算分配给它们的值。

您的代码看起来像是要displayBox对象的上下文中运行您需要Box在某个时候创建一个新值并为其分配值。您可以执行以下操作的一种方法是替换:

div.onclick = display

和:

div.box = new Box(id, name, color, xpos, ypos);
div.onclick = function() { display.call(this.box); };

这不是做您想要的事情的最干净的方法,但是它向您展示了一些机制,并且希望您可以将其用作起点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将局部变量传递给另一个函数?

来自分类Dev

Laravel-将变量从一个函数传递给另一个函数

来自分类Dev

Python单元测试如何将变量从一个函数传递给另一个函数

来自分类Dev

如何在另一个函数中使用函数变量值?

来自分类Dev

如何在angularJS中将变量从一个函数传递给另一个函数?

来自分类Dev

如何将字符串变量从一个函数传递给另一个函数?

来自分类Dev

将变量从一个函数传递到另一个函数-Javascript

来自分类Dev

JavaScript-如何将变量从一个异步函数传递给另一个异步函数?

来自分类Dev

Laravel-将变量从一个函数传递给另一个函数

来自分类Dev

通过AJAX调用以自动完成方式将变量值从一个函数传递给另一个函数

来自分类Dev

将变量从一个函数传递到另一个函数

来自分类Dev

将变量值从一个函数传递到另一个函数

来自分类Dev

如何将一个函数的值传递给另一个函数?

来自分类Dev

如何将变量从一个函数传递给另一个函数

来自分类Dev

将变量值传递给另一个用户的外壳

来自分类Dev

Python:在传递给另一个函数之前先替换变量值

来自分类Dev

Ajax:如何将一个函数的变量传递给另一个jQuery

来自分类Dev

如何在另一个函数中使用函数变量值?

来自分类Dev

如何将$(this)变量传递给另一个函数javascript

来自分类Dev

如何使用itertools将返回的值从一个函数传递给另一个函数?

来自分类Dev

如何在angularJS中将变量从一个函数传递给另一个函数?

来自分类Dev

在C中如何将局部函数变量值传递给另一个函数并打印值而不会出现错误

来自分类Dev

如何将另一个函数作为变量传递给R中的函数?

来自分类Dev

将变量从一个 JS 函数传递到另一个函数

来自分类Dev

C++ 如何将引用从一个函数传递到另一个函数?

来自分类Dev

将变量值传递给 ionic2 中的另一个组件

来自分类Dev

如何将变量从一个函数传递给另一个函数?

来自分类Dev

Angular 2 firebase 如何将变量传递给另一个函数?

来自分类Dev

将变量 (id) 从一个函数传递到另一个函数

Related 相关文章

  1. 1

    如何将局部变量传递给另一个函数?

  2. 2

    Laravel-将变量从一个函数传递给另一个函数

  3. 3

    Python单元测试如何将变量从一个函数传递给另一个函数

  4. 4

    如何在另一个函数中使用函数变量值?

  5. 5

    如何在angularJS中将变量从一个函数传递给另一个函数?

  6. 6

    如何将字符串变量从一个函数传递给另一个函数?

  7. 7

    将变量从一个函数传递到另一个函数-Javascript

  8. 8

    JavaScript-如何将变量从一个异步函数传递给另一个异步函数?

  9. 9

    Laravel-将变量从一个函数传递给另一个函数

  10. 10

    通过AJAX调用以自动完成方式将变量值从一个函数传递给另一个函数

  11. 11

    将变量从一个函数传递到另一个函数

  12. 12

    将变量值从一个函数传递到另一个函数

  13. 13

    如何将一个函数的值传递给另一个函数?

  14. 14

    如何将变量从一个函数传递给另一个函数

  15. 15

    将变量值传递给另一个用户的外壳

  16. 16

    Python:在传递给另一个函数之前先替换变量值

  17. 17

    Ajax:如何将一个函数的变量传递给另一个jQuery

  18. 18

    如何在另一个函数中使用函数变量值?

  19. 19

    如何将$(this)变量传递给另一个函数javascript

  20. 20

    如何使用itertools将返回的值从一个函数传递给另一个函数?

  21. 21

    如何在angularJS中将变量从一个函数传递给另一个函数?

  22. 22

    在C中如何将局部函数变量值传递给另一个函数并打印值而不会出现错误

  23. 23

    如何将另一个函数作为变量传递给R中的函数?

  24. 24

    将变量从一个 JS 函数传递到另一个函数

  25. 25

    C++ 如何将引用从一个函数传递到另一个函数?

  26. 26

    将变量值传递给 ionic2 中的另一个组件

  27. 27

    如何将变量从一个函数传递给另一个函数?

  28. 28

    Angular 2 firebase 如何将变量传递给另一个函数?

  29. 29

    将变量 (id) 从一个函数传递到另一个函数

热门标签

归档