如何使用OnChange和Marketo避免表单重叠加载

4
我有一个下拉列表,带有“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>
1个回答

3

我推荐以下做法:

  1. Implement a way to check if a Marketo form has loaded. For example:

    //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. Implement a way to remove the Marketo form. For example:

    //jQuery implementation to remove form element
    $( "form" ).remove();
    
  3. Implement conditional logic to determine current state. For example:

    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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接