这可能是一个非常基本的问题,但我似乎无法找到正确的答案。如何在触发警报之前等待变量更新?我读过我想要使用回调,但是有两个功能,所以当我有一个" global"时,我不确定如何使用回调。警报。
现在警报被触发为空,因为变量未更新。
var WaardeStrafblad = ""
var WaardeVerzekering = ""
$('input:checkbox[id=Strafblad]').change(function () {
if ($("#Strafblad").is(":checked")) {
WaardeStrafblad = "Ik heb geen strafblad"
} else {
WaardeStrafblad = ""
}
});
$('input:checkbox[id=Verzekering]').change(function () {
if ($("#Verzekering").is(":checked")) {
WaardeVerzekering = "Ik ben bereid een verzekering af te sluiten"
} else {
WaardeVerzekering = ""
}
});
$("#Strafblad").click(function(){
alert(WaardeStrafblad + " " + WaardeVerzekering);
});
答案 0 :(得分:2)
这里几件事。首先,使用不太复杂的jQuery选择器会更好,特别是如果您的元素具有id
属性。它更快,更不容易出错,所以我会改变这样的代码:
var WaardeStrafblad = "";
var WaardeVerzekering = "";
$("#Strafblad").change(function() {
if ($("#Strafblad").is(":checked")) {
WaardeStrafblad = "Ik heb geen strafblad";
} else {
WaardeStrafblad = "";
}
});
$("#Verzekering").change(function() {
if ($("#Verzekering").is(":checked")) {
WaardeVerzekering = "Ik ben bereid een verzekering af te sluiten";
} else {
WaardeVerzekering = "";
}
});
$("#Strafblad").click(function() {
alert(WaardeStrafblad + " " + WaardeVerzekering);
});
请注意我们不再检查input:checkbox
,如果我们已经知道id
,则无需指定它是input
类型{ {1}}。
此失败的原因是更改侦听器在点击侦听器之后触发,因此只有在您选中checkbox
之后单击Strafblad
复选框时才会按预期打印(或者如果它是您第二次点击Verzekering
)。
由于点击侦听器也将触发更改,只需删除该侦听器并将警报调用添加到Strafblad
的更改侦听器的末尾,如下所示:
Strafblad
也许它也应该放在另一个听众的尽头,但不幸的是我不懂语言所以我只会给你一个最小的解决方案:)
答案 1 :(得分:0)
您必须将元素存储到变量中 接下来,您将创建一个函数来检查每个元素是否已填充。
你的代码应该是:
// this order of the object define the output order
var Waarde = {
Strafblad: "",
Verzekering: ""
};
var elements = $('#Strafblad, #Verzekering');
elements.change(function() {
if ($(this).is(":checked")) {
Waarde[$(this).attr('id')] = $(this).val();
if (checkforFilledObject(Waarde)) {
alert(outputElements(Waarde));
}
} else {
Waarde[$(this).attr('id')] = "";
}
console.log(Waarde);
});
function checkforFilledObject(values) {
var filled = true;
$.each(values, function(i, value) {
if (value === "") {
filled = false;
}
});
return filled;
}
function outputElements(values) {
var valueArrays = Object.keys(values).map(function(key) {
return values[key];
});
return valueArrays.join(' ');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="Strafblad" value="Ik heb geen strafblad"> Strafblad
<input type="checkbox" id="Verzekering" value="Ik ben bereid een verzekering af te sluiten"> Strafblad
答案 2 :(得分:-1)
你可以在那里做几种方法。您可以在选中复选框后运行的click
中添加if/then
事件注册。
但是,在这种情况下,我认为将alert
包裹在if/then
中对这两个变量进行测试并且没有显示{{1}更简单除非他们都已初始化:
alert
&#13;
var WaardeStrafblad = ""
var WaardeVerzekering = ""
$('input:checkbox[id=Strafblad]').change(function () {
if ($("#Strafblad").is(":checked")) {
WaardeStrafblad = "Ik heb geen strafblad"
} else {
WaardeStrafblad = ""
}
});
$('input:checkbox[id=Verzekering]').change(function () {
if ($("#Verzekering").is(":checked")) {
WaardeVerzekering = "Ik ben bereid een verzekering af te sluiten"
} else {
WaardeVerzekering = ""
}
});
$("#Strafblad").click(function(){
// Just check that both variables are not empty
if(WaardeStrafblad && WaardeVerzekering ){
alert(WaardeStrafblad + " " + WaardeVerzekering);
}
});
&#13;
答案 3 :(得分:-2)
可以使用超时功能并延迟执行点击功能
$("#Strafblad").click(function(){
setTimeout(" alert(WaardeStrafblad + " " + WaardeVerzekering);", 2000);
});
或者你可以在结束时触发内部变化。