2017-02-10 139 views
1
var userChoice; 
$(document).ready(function(){ 
$("#rock").click(function(){ 
    userChoice = "rock"; 
}); 
$("#paper").click(function(){ 
    userChoice = "paper"; 
}); 
$("#scissors").click(function(){ 
    userChoice = "scissors"; 
}); 
}); 
document.write(userChoice); 

我正在尝试在单击事件后获取用户输出。但是当我运行这个代码时,我得到的输出为“未定义”。我对编程非常陌生。在javascript中打印变量外功能

+5

这是2017年 - 'document.write'属于前一个千年,更不用说世纪了。 – Jamiec

+0

你是对的@Jamiec,但我们正在与一个非常大的新手交谈! – misterwolf

+0

@misterwolf更有理由尽早地杀死坏习惯。 – Jamiec

回答

3

首先更新,不要使用document.write。这被认为是非常糟糕的做法。而是修改DOM元素的文本以显示输出。

其次,问题是因为您只检查页面加载时的值userChoice。你需要,而不是检查它在每个click事件,像这样:但是,您可以通过使用干进一步改善这个代码

$(document).ready(function() { 
 
    $("#rock").click(function() { 
 
    var userChoice = "rock"; 
 
    $('#output').text(userChoice); 
 
    }); 
 
    
 
    $("#paper").click(function() { 
 
    var userChoice = "paper"; 
 
    $('#output').text(userChoice); 
 
    }); 
 
    
 
    $("#scissors").click(function() { 
 
    var userChoice = "scissors"; 
 
    $('#output').text(userChoice); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="rock">Rock</button> 
 
<button id="paper">Paper</button> 
 
<button id="scissors">Scissors</button> 
 
<div id="output"></div>

注(不要重复自己)原则。要做到这一点应用类的所有元素,并使用一个单一的事件处理程序:

$(document).ready(function() { 
 
    $(".choice").click(function() { 
 
    userChoice = this.id; 
 
    $('#output').text(userChoice); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="rock" class="choice">Rock</button> 
 
<button id="paper" class="choice">Paper</button> 
 
<button id="scissors" class="choice">Scissors</button> 
 
<div id="output"></div>

+0

啊......打我吧 – mplungjan

+0

这就是我一直在寻找的东西。非常感谢! –

+0

Btw!我使用岩石,纸张和剪刀的字体棒图标。他们已经有一堂课。我如何使用其他课程? –

1

这是因为,

document.write(userChoice); 

执行的页面加载和userChoice获得新的价值,当一些click操作执行。

那么试试这个:

$("#scissors").click(function(){ 
    userChoice = "scissors"; 
    console.log(userChoice); 
}); 

注:不要使用document.write(),因为这会使你的整个页面空白,只显示在userChoice

+0

哦,是的!但是,如何在功能外打印新值。你可以帮我吗? –

0

文本将document.write()点击回调函数中:

var userChoice; 
$(document).ready(function(){ 
$("#rock").click(function(){ 
    userChoice = "rock"; 
    document.write(userChoice); 
}); 
$("#paper").click(function(){ 
    userChoice = "paper"; 
    document.write(userChoice); 
}); 
$("#scissors").click(function(){ 
    userChoice = "scissors"; 
    document.write(userChoice); 
}); 
}); 

document.write()被调用一旦页面已经加载并且只有这一次。但由于您没有给userChoice初始化一个值,它的值是undefined。当您点击其中一个按钮时,userChoice的值会被更改,但不会再调用document.write()

1

你必须把打印内点击事件。 当页面加载时,document.write立即触发并在当时为空。

var userChoice; 
$(document).ready(function(){ 
$("#rock").click(function(){ 
    userChoice = "rock"; 
    console.log(userChoice);//THIS WAY 
}); 
$("#paper").click(function(){ 
    userChoice = "paper"; 
}); 
$("#scissors").click(function(){ 
    userChoice = "scissors"; 
}); 
}); 
0

只有一个替换您的功能和使用innerHTML或更改其中的值是得到选择。

document.write(userChoice);将点击事件之前执行,并不会在点击

var userChoice; 
 
$(document).ready(function() { 
 
    $(".choice").click(function(){ 
 
    userChoice = this.innerHTML; 
 
    console.log(userChoice); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<p class="choice">rock</p> 
 
<p class="choice">paper</p> 
 
<p class="choice">scissors</p>

0
  1. 从未页面加载后执行文件撰写。而是更新一些标签。html()
  2. 你执行你的写之前,你点击任何东西。

你可能意味着

var userChoice = ""; 
 
$(document).ready(function() { 
 
    $(".hitme").click(function() { 
 
    userChoice = this.id; 
 
    $("#choice").html(userChoice); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button class="hitme" type="button" id="rock">Rock</button> 
 
<button class="hitme" type="button" id="paper">Paper</button> 
 
<button class="hitme" type="button" id="scissors">Scissors</button> 
 
<span id="choice"></span>

0

我想,最好不要给你的代码执行最后的代码,但更多的解释:

不要使用

document.write 

这是危险的,它可以重写整个html页面(当页面已经加载时)。

的输出设定为“不确定”,因为变量

userChoice 

是不是还初始化,一旦用户触发一个事件将被初始化:你的情况了div点击。所以,只要将“userChoice”打印/阐述

(eg: $('.some_div').innerHTML = userChoice) 

到事件处理程序,像你这样的一个:

$("#scissors").click(function(){ .... }) 

阅读本指南,了解有关JavaScript执行更全面的信息/运行时间:http://davidshariff.com/blog/what-is-the-execution-context-in-javascript/。 如果你会喜欢它,并在将来可能编码,你会发布其他有关Javascript的有趣问题!