jQuery - 在触发警报之前等待变量更新

时间:2017-06-29 20:31:27

标签: javascript jquery

这可能是一个非常基本的问题,但我似乎无法找到正确的答案。如何在触发警报之前等待变量更新?我读过我想要使用回调,但是有两个功能,所以当我有一个" 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);
});

4 个答案:

答案 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

也许它也应该放在另一个听众的尽头,但不幸的是我不懂语言所以我只会给你一个最小的解决方案:)

Here is a working example

答案 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}更简单除非他们都已初始化:

&#13;
&#13;
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;
&#13;
&#13;

答案 3 :(得分:-2)

可以使用超时功能并延迟执行点击功能

$("#Strafblad").click(function(){
    setTimeout(" alert(WaardeStrafblad + " " + WaardeVerzekering);", 2000);   
});

或者你可以在结束时触发内部变化。