【问题标题】:How to avoid loading forms on top of each other using OnChange and Marketo如何避免使用 OnChange 和 Marketo 将表单加载到彼此之上
【发布时间】:2014-10-30 12:13:27
【问题描述】:

我有一个带有“onchange”功能的下拉列表,可以根据用户输入加载 Marketo 表单。表单加载正确,除了当用户最初选择“需要新产品”然后切换到“需要支持”(反之亦然)时,“产品表单”不会消失。取而代之的是,“产品表单”保持不变,并且另外加载了“需要支持”表单(在产品表单下方)。用户可以多次切换/触发器导致许多额外的表单这是一个问题!

我需要帮助调整代码,以便始终只加载一个表单,并且当用户触发器时用户选择的先前表单不再存在。有什么帮助吗??谢谢!

<script src="//app-e.marketo.com/js/forms2/js/forms2.js"></script>

<p>How can we help?</p>
<select id="mySelect" onchange="myFunction()">
  <option value="default">--please select a reason--</option>
  <option value="product">Need a new product</option>
  <option value="support">Need support</option>
</select>


<p id="demo"></p>
<script>
function myFunction() {
    var x = document.getElementById("mySelect").value;
    document.getElementById("demo").innerHTML = "You selected: " + x;
    if (x == "product") {
        MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber", *uniquenumber);
    }
    else if (x == "support") {
        MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber2", *uniquenumber2);
    }
}
</script>

<form id="mktoForm_*uniquenumber1"></form>
<form id="mktoForm_*uniquenumber2"></form>

【问题讨论】:

    标签: javascript forms onchange getelementbyid marketo


    【解决方案1】:

    我建议如下:

    1. 实现一种方法来检查 Marketo 表单是否已加载。例如:

      //Checks for element that matches "mktoForm_". If match, variable returns id of element. If no match, variable returns undefined. 
      var y = document.querySelector('[id^=mktoForm_]').id;
      
    2. 实现一种删除 Marketo 表单的方法。例如:

      //jQuery implementation to remove form element
      $( "form" ).remove();
      
    3. 实现条件逻辑来确定当前状态。例如:

      if (x == "product" && y === undefined) {
          MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber", *uniquenumber);
      }
      else if (x == "product" && y != undefined) {
          //jQuery implementation to remove form element
          $( "form" ).remove();
          MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber2", *uniquenumber2);
      }
      else if (x == "support" && y === undefined) {
          MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber2", *uniquenumber2);
      }
      else (x == "support" && y != undefined) {
          //jQuery implementation to remove form element
          $( "form" ).remove();
          MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber2", *uniquenumber2);
      }
      

    这是一个可能的实现:

    <script>
    function myFunction() {
        var x = document.getElementById("mySelect").value;
        //Checks for element that matches "mktoForm_". If no match, variable returns undefined. 
        var y = document.querySelector('[id^=mktoForm_]').id;
        document.getElementById("demo").innerHTML = "You selected: " + x;
    
        if (x == "product" && y === undefined) {
            MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber", *uniquenumber);
        }
        else if (x == "product" && y != undefined) {
            //jQuery implementation to remove form element
            $( "form" ).remove();
            MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber2", *uniquenumber2);
        }
        else if (x == "support" && y === undefined) {
            MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber2", *uniquenumber2);
        }
        else (x == "support" && y != undefined) {
            //jQuery implementation to remove form element
            $( "form" ).remove();
            MktoForms2.loadForm("//app-e.marketo.com", "*uniquenumber2", *uniquenumber2);
        }
    }
    </script>
    

    【讨论】:

      猜你喜欢
      • 2017-10-18
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-05
      • 2013-10-25
      • 1970-01-01
      相关资源
      最近更新 更多