- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
今天我学习了如何使用 JS 创建和读取按钮等对象。然后问题发生了。
在 shopDraw()(创建按钮)并尝试使用来自另一个函数的 shopClose() 杀死它们之后,我得到错误:“ReferenceError:button1 未定义”。我试过从 shopDraw() 做同样的事情,但它也返回错误。我做错了什么?
如果我尝试在警报后将代码从 shopClose() 粘贴到 shopDraw(),它很容易删除它们!
function shopDraw() {
shopOpened=true;
var br1 = document.createElement('br');
var br2 = document.createElement('br');
var br3 = document.createElement('br');
var button1 = document.createElement('input');
button1.type = 'button';
if (swordBought===false) {button1.value = 'Приобрести меч '; swordBought=true;}
else {button1.value='Улучшить меч'}
button1.addEventListener('click', function() {shop(1)}, false);
var button2 = document.createElement('input');
button2.type = 'button';
if (armorBought===false) {button2.value = 'Приобрести броню '; armorBought=true;}
else {button2.value='Улучшить броню'}
button2.addEventListener('click', function() {shop(2)}, false);
var button3 = document.createElement('input');
button3.type = 'button';
if (bootBought===false) {button3.value = 'Приобрести сапоги '; bootBought=true;}
else {button3.value='Улучшить сапоги'}
button3.addEventListener('click', function() {shop(3)}, false);
var button4 = document.createElement('input');
button4.type = 'button';
button4.value='Восстановить здоровье'
button4.addEventListener('click', function() {shop(4)}, false);
document.body.insertBefore(button1, BattleLogger);
document.body.insertBefore(button2, BattleLogger);
document.body.insertBefore(br1, button2);
document.body.insertBefore(button3, BattleLogger);
document.body.insertBefore(br2, button3);
document.body.insertBefore(button4, BattleLogger);
document.body.insertBefore(br3, button4);}
function shopClose(){
button1.parentNode.removeChild(button1);
button2.parentNode.removeChild(button2);
button3.parentNode.removeChild(button3);
button4.parentNode.removeChild(button4);
br1.parentNode.removeChild(br1);
br2.parentNode.removeChild(br2);
br3.parentNode.removeChild(br3);
最佳答案
这是一个范围问题。
例如,var button1 = document.createElement('input');
是在 shopDraw()
内部创建的,所以 button1
是仅在该功能内可用。在 shopClose()
中它是未定义的。
您可以通过在函数外部声明变量来解决此问题:
var button1;
function shopDraw() {
button1 = document.createElement('input');
...
}
function shopClose() {
button1.parentNode.removeChild(button1);
}
关于javascript - JS : trouble with earsing buttons with function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779366/
我遇到过这个 html: 上面的html和这个有什么区别: 最佳答案 来自MDN page on the tag : 对于 type 的属性标签,可能的值是: 提交:按钮将表单数据提交给服务器
Button button= (Button) findViewbyID(R.id.button); 和 Button button = new Button(this); 有什么区别? 最佳答案 有
我是一名优秀的程序员,十分优秀!