2013-07-16 29 views
0

我有两个json自定义块,一个是自定义的,另一个来自服务器。它的工作方式是,我有一个for循环,它通过静态json运行,并根据其中的内容将窗体html附加到窗口,如果这些值存在于基于第二个json对象的服务器上,它将同时向这些窗体添加值这是从服务器带来的。所以当field.jsonName ==键入它启动另一个if语句,查看json对象的值。如果该对象是== 2,它应该更改该选择框的值。它确实登录了控制台'type = 2'在if语句中被忽略的jQuery。控制台日志显示正在执行if语句

我发现了很多不同的方法来改变选择框的值,我尝试了所有这些我都能想到但我是仍然没有得到我需要的结果。就好像整个陈述由于某种原因而被忽略。我的代码如下

仅供参考这里是代码

 // Add default Fields to Fieldset 
     addDefaultFields: function(fieldset) { 
      for (f in defaults.fields) { 
       // get field info - if quizJSON exists, use quizJSON data 
       field  = defaults.fields[f]; 
       inputName = field.q.replace(/\W/g,''); 
       required = field.required ? defaults.requiredString : ''; 
       nameAndId = 'name="' + inputName + '" id="' + inputName + '"'; 
       option1 = '<option value=' +field.value1+ '>' + field.option1 + '</option>'; 
       option2 = '<option value=' +field.value2+ '>' + field.option2 + '</option>'; 
       option3 = '<option value=' +field.value3+ '>' + field.option3 + '</option>'; 
       option4 = '<option value=' +field.value4+ '>' + field.option4 + '</option>'; 
       option5 = '<option value=' +field.value5+ '>' + field.option5 + '</option>'; 
       option6 = '<option value=' +field.value6+ '>' + field.option6 + '</option>'; 

       if (quizValues != null) { 

        //Prevent Passing score from resetting when editing a quiz 

        if (field.jsonName == 'percent'){ 
         value = plugin.formHelper.htmlspecialchars(quizValues.info[field.jsonName] * 100); 
        } else if (field.jsonName == 'type') { console.log(quizValues.info.type); 
         if(quizValues.info.type == '0') { 
          $("#QuizType").val('0'); 
         } else if (quizValues.info.type == '1') { 
          $("#QuizType").val('1'); 
         } else if (quizValues.info.type == '2') { 
          $("#QuizType").val('2'); console.log('type = 2'); 
         } else if (quizValues.info.type == '3') { 
          $("#QuizType").val('3'); 
         } else if (quizValues.info.type == '4') { 
          $("#QuizType").val('4'); 
         } else { 
          $("#QuizType").val('5'); 
         } 
        } 

        else{ 

         value = plugin.formHelper.htmlspecialchars(quizValues.info[field.jsonName]); } 
       } else { 
        value = ''; 
       } 

这里的较大部分,我用

else if (field.jsonName == 'type') { console.log(quizValues.info.type); 
         if(quizValues.info.type == '0') { 
          $("#QuizType").val('0'); 
         } else if (quizValues.info.type == '1') { 
          $("#QuizType").val('1'); 
         } else if (quizValues.info.type == '2') { 
          $("#QuizType").val('2'); console.log('type = 2'); 
         } else if (quizValues.info.type == '3') { 
          $("#QuizType").val('3'); 
         } else if (quizValues.info.type == '4') { 
          $("#QuizType").val('4'); 
         } else { 
          $("#QuizType").val('5'); 
         } 
        } 

奋力前的console.log当它进入的部分否则,如果field.name =='percent'显示type = 2的值。第二次如预期的那样触发该type = 2。但是没有其他事情发生。

+0

目前尚不清楚你想要什么。你什么时候想要第二个'else if'块执行?如果'jsonName'是'percent',它将永远不会执行。 –

+0

所有那些if else语句看起来像是一个关联数组的完美点。 – tymeJV

+0

基本上我有两块json,一块是自定义的,另一块是从服务器上获取的。它的工作方式是for循环遍历静态json,并根据其中的内容将窗体html附加到窗口,如果这些值存在于基于第二个json对象的服务器上,则同时为这些窗体添加值服务器。所以当field.jsonName ==键入它启动另一个if语句,查看json对象的值。如果该对象是== 2,它应该触发值更改。它会触发console.log('type = 2')部分。 – richbai90

回答

0

你的代码不是很清楚,它不是很明显,你想完成什么。但是你可以通过只是在做这个显著砍倒在你的代码的复杂性(和错误的可能性):

else if(field.jsonName === "type") { 
    var type = parseInt(quizValues.info.type, 10); 

    if(type < 5) { 
     $("#QuizType").val(type); 
    } else { 
     $("#QuizType").val(5); 
    } 
} 
+0

仍然无法正常工作,但是有趣的是,这在从控制台执行时不起作用。请记住,我将类型变量附加到窗口对象,以便我可以从控制台访问它。 'if(window.type <5){jQuery(“#QuizType”).val(window.type);}' – richbai90

+0

您是否在'else if'块中记录了'type',看看它的值是什么? –

+0

是的,我做了,它的记录值为2.但是选择框的实际值没有变化。 – richbai90

0

很抱歉,这是一个糟糕的问题,多一点的调试发现,在该点时执行我的代码测验类型不存在。不知道为什么,但这是一个开始。