http://jsfiddle.net/luketheterrible/BMedV/
我正在编写一个测验,用户必须通过单击左侧的div或右侧的div来从两个选项中进行选择。
$('#answers').on('click', 'div', function(event) {
event.preventDefault();
var input = "";
function userAnswer(event) {
var target = $(event.target);
if(target.is('#answerLeft')) {
alert("you clicked left");
input = "left";
return input;
} else {
alert("you clicked right");
input = "right";
return input;
}
return input;
}
alert(input);
});
});
由于某种原因,变量“input”是未定义的。尽管有很多搜索,但我似乎无法找到一个答案,将输入定义为用户点击的div。
答案 0 :(得分:2)
您定义了您的函数userAnswer
,但您永远不会调用它。
userAnswer(event); // execute the function
alert(input);
http://jsfiddle.net/mblase75/BMedV/1/
更好的是,完全删除该功能:
$('#answers').on('click', 'div', function (event) {
event.preventDefault();
var input = "";
//which answer did the user pick
var target = $(event.target);
if (target.is('#answerLeft')) {
input = "left";
} else {
input = "right";
}
alert(input);
});
答案 1 :(得分:1)
你永远不会打电话给你的方法...
$(document).ready(function(){
$('#answers').on('click', 'div', function(event) {
event.preventDefault();
var input = userAnswer(event); // Need to call this method...
//which answer did the user pick
function userAnswer(event) {
var target = $(event.target);
if(target.is('#answerLeft')) {
alert("you clicked left");
input = "left";
return input;
} else {
alert("you clicked right");
input = "right";
return input;
}
return input;
}
alert(input);
});
});
答案 2 :(得分:1)
无需定义函数http://jsfiddle.net/BMedV/5/
$(document).ready(function(){
$('#answers').on('click', 'div', function(event) {
event.preventDefault();
var input = "";
//which answer did the user pick
//function userAnswer(event) {
var target = $(event.target);
if(target.is('#answerLeft')) {
alert("you clicked left");
input = "left";
//return input;
} else {
alert("you clicked right");
input = "right";
//return input;
}
//return input;
//}
//alert(input);
});
});
答案 3 :(得分:1)
您还可以使用数据属性直接获取答案文本。
HTML
<div id="answerLeft" data-answer="left"></div>
<div id="answerRight" data-answer="right"></div>
的jQuery
$(document).ready(function(){
$('#answers').on('click', 'div', function(event) {
event.preventDefault();
var input = $(this).data("answer");
alert(input);
});
});
我更新了您的jsFiddle以显示此信息:
答案 4 :(得分:0)
答案已经给出,你从不调用函数,因此输入永远不会给出值。然而,一个未来调试的提示:当一个变量最终没有这样的值时,通常意味着它从未被赋予一个,它被覆盖,或者你有一个范围问题。
其范围很多次,请查看变量的定义位置以及设置/调用它的位置。
如果您确定它不是范围问题,那么最有可能是另一个问题2.最好的方法是找出在整个代码中放置调试或(颤抖!)警报,并按照消息进行操作。所以每隔几行都会弹出一条消息并打印出变量。你将能够看到它是否获得了一个值,并且该值会丢失。
确保将消息放入所有函数中,这样如果最后你没有看到来自一个或多个函数的任何消息,你知道那些从未调用过的函数,那就是消息没有显示的原因。 / p>
在这种情况下,放置在你的功能中的按摩不会显示,很快就会发现这个功能从未被调用过。
HTH 祝你好运!