2

さて、ここで私の最初の質問に行きます。

セットアップ:JavaScriptベースのツールを使用して、ランディングページのデザインをA/Bテストします。1つの外部JavaScriptファイルにリンクするにはバージョンA(コントロール)が必要であり、代替のJavaScriptファイルにリンクするにはバージョンB(バリエーション)が必要です。

目標:ツールが実際にAまたはBを提供しているかどうか、真の場合はどちらが提供されているかを確認する内部jsスクリプトをコントロールの下部に配置すること。結果は、どの外部スクリプトをリンクする必要があるかを示しています。

問題:ツールが実際にAまたはBを提供しているかどうかに関係なく、元のスクリプトが最初にリンクされ、ツールが検出されると、その後適切なスクリプトがリンクされます。

これが私のコードです(初心者のミスを前もってお詫びします):

//script at bottom of original or tool-served control html page template
<script type="text/javascript">
valForTool = function () {
  var variationId = _tool_exp[_tool_exp_ids[0]].combination_chosen;
  if (variationId == 1) {
     var newScript = document.createElement('script');
     newScript.type = 'text/javascript';
     newScript.src = 'js/scripts.js';
     document.body.appendChild(newScript);
   };
}
originalValidation = function () {
  var newScript = document.createElement('script');
   newScript.type = 'text/javascript';
   newScript.src = 'js/scripts.js';
   document.body.appendChild(newScript);
}
$(function(){
  if (typeof _tool_exp_ids !== 'undefined' && typeof _tool_exp_ids[0] !== 'undefined') {
     valForTool();
  }  else {   
     originalValidation();
  };   
});
</script>
//end script on control or original template  

//script on tool-served variation html template - will run after the above script
<script type="text/javascript"> 
$(function() {
     $('#project_info input[type=submit]').removeAttr('disabled');
     $('#project_info').unbind();
     var newScript = document.createElement('script');
     newScript.type = 'text/javascript';
     newScript.src = 'js/scripts2.js';
     document.body.appendChild(newScript);  
     $('.input_text').parent().addClass('contact_field');
 });
</script>
// end script on variation template

私が間違っていることについて何か考えはありますか?十分な情報を提供しましたか?ありがとう!質問の参考としてこのサイトが大好きですが、実際に投稿するのは今回が初めてです。

4

1 に答える 1

0

少し短くすると、これをやっているだけのようです:

<script type="text/javascript">
$(function(){
   if (typeof _tool_exp_ids !== 'undefined' && typeof _tool_exp_ids[0] !== 'undefined') {
      var variationId = _tool_exp[_tool_exp_ids[0]].combination_chosen;
      if (variationId == 1) {
          $.getScript('js/scripts.js', function() {runSecond();});
      }
   }else{   
          $.getScript('js/scripts.js', function() {runSecond();});
   }

   function runSecond() {
      $('#project_info input[type=submit]').removeAttr('disabled').unbind();
      $.getScript('js/scripts2.js');
      $('.input_text').parent().addClass('contact_field');
   }
});
</script>

これを見ると、if/else ステートメントでどのような条件が満たされていても、両方のスクリプトが実行されていることは明らかです。あなたが何をしようとしているのかはよくわかりませんが、最初に行うことはいくつかの console.logs を追加して、これらの if/else ステートメントが想定どおりに機能しているかどうかを確認し、次に、どの条件でどのスクリプトをロードする必要があるかなどを把握しますか?

于 2012-04-17T21:54:31.407 に答える