首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >salesforce web到lead form嵌套

salesforce web到lead form嵌套
EN

Stack Overflow用户
提问于 2017-04-28 02:55:16
回答 1查看 329关注 0票数 0

我正在尝试使用一个普通的老式Content Block控件将Salesforce Web- to -lead表单插入到我们外部网站的内容块管理系统(如果有区别,我们使用Telerik SiteFinity )的页面中。不幸的是,当呈现页面时,SiteFinity会创建自己的标记来包装Salesforce生成的代码,从而创建一个嵌套表单。这显然行不通。

有没有人能想出解决这样的问题的办法?我看过其他嵌套表单解决方案,但没有看到这样的解决方案。其他的似乎都暗示着对代码的更多控制,这是我在SiteFinity中所没有的(我们的SF实例是在外部开发的,我们必须处理的就是内容管理方面的事情)。

我尝试过的一件事就是在Salesforce生成的代码前放置一组空的表单标签,这在某种程度上是可行的,但它的编码实践很糟糕。但是,该页面不使用返回的URL,而只是列出了已排队等待插入到SF组织中的Leads对象中的字段。

下面是我插入的Web-to-lead代码(加上不良做法的空表单):

代码语言:javascript
复制
<form></form>
<!--  ----------------------------------------------------------------------  -->
<!--  NOTE: Please add the following <META> element to your page <HEAD>.      -->
<!--  If necessary, please modify the charset parameter to specify the        -->
<!--  character set of your HTML page.                                        -->
<!--  ----------------------------------------------------------------------  -->
<!-- <META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8"> -->
<!--  ----------------------------------------------------------------------  -->
<!--  NOTE: Please add the following <FORM> element to your page.             -->
<!--  ----------------------------------------------------------------------  -->
<form id="sf_lead_entry" action="https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" method="POST">
    <input name="oid" type="hidden" value="<org id>" />
    <input name="retURL" type="hidden" value="https://uat.collegeadvantage.com/529intheworkplace/thank-you" />
    <!--  ----------------------------------------------------------------------  -->
    <!--  NOTE: These fields are optional debugging elements. Please uncomment    -->
    <!--  these lines if you wish to test in debug mode.                          -->
    <input name="debug" type="hidden" value="1" />
    <input name="debugEmail" type="hidden" value="software@collegeadvantage.com" />
    <!--  ----------------------------------------------------------------------  -->
    <label for="first_name">First Name</label><input name="first_name" id="first_name" type="text" size="20" maxlength="40" /><br />
    <label for="last_name">Last Name</label><input name="last_name" id="last_name" type="text" size="20" maxlength="80" /><br />
    <label for="company">Company</label><input name="company" id="company" type="text" size="20" maxlength="40" /><br />
    <label for="title">Title</label><input name="title" id="title" type="text" size="20" maxlength="40" /><br />
    <label for="phone">Phone</label><input name="phone" id="phone" type="text" size="20" maxlength="40" /><br />
    <label for="email">Email</label><input name="email" id="email" type="text" size="20" maxlength="80" /><br />
    <label for="street">Street</label><textarea name="street"></textarea><br />
    <label for="city">City</label><input name="city" id="city" type="text" size="20" maxlength="40" /><br />
    <label for="state">State/Province</label><input name="state" id="state" type="text" size="20" maxlength="20" /><br />
    <label for="zip">Zip</label><input name="zip" id="zip" type="text" size="20" maxlength="20" /><br />
    Lead Channel:<textarea name="<custom control id>" id="<custom control id>" wrap="soft" type="text"></textarea><br />
    <input name="submit" type="submit" value="Submit Query" />
</form>

有没有人有办法解决这个问题?

谢谢,杰米

EN

回答 1

Stack Overflow用户

发布于 2017-04-28 13:07:13

因为Sitefinity是asp.net应用程序,所以它在所有页面上都有form标签。而且您不能嵌套form标记。

来自html5规范:https://www.w3.org/TR/html5/forms.html#the-form-element

4.10.3表单元素

内容模型:

流内容,但没有form元素的后代。

在您的情况下,有两种方法。

  • Best way将遵循@Veselin Vasilev方法,使用javascript为
  • 创建新的asp.net控件,并使用div代替form tag.This JS将在您单击提交按钮后创建隐藏表单。

用数据属性替换div的示例:

<div data-sitefinity-form="" data-action="https://www.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8" data-method="POST"> </div>

JS:

代码语言:javascript
复制
(function() {
        var pseudoForms = document.querySelectorAll('[data-sitefinity-form]');
        for(j=0;j<pseudoForms.length;j++)
        {
           var container = pseudoForms[j];
           if (container === null)
               return;
           var inputs = container.querySelectorAll("input, textarea, select");
           var allInputs = document.forms["aspnetForm"].querySelectorAll('input, textarea', 'select');
           for (var i = 0; i < allInputs.length; i++) {
               allInputs[i].addEventListener("invalid", function(event) {
                   if (Array.indexOf(inputs, document.activeElement) >= 0 && Array.indexOf(inputs, event.target) < 0)
                       event.preventDefault();
               }, true);
           }
           var submitClick = function (sender) {
               var isValid = true;
               if (isValid) {
                    function findAncestor (el) {
                        while ((el = el.parentElement) && !el.hasAttribute("data-sitefinity-form"));
                        return el;
                    }
                    var pForm = findAncestor(sender.target || sender.srcElement);
                   var form = document.createElement("form");
                   form.style.display = "none";
                   form.setAttribute("action", pForm.getAttribute("data-action"));

                   if (pForm.getAttribute("data-method"))
                        form.setAttribute("method", pForm.getAttribute("data-method"));
                   if (pForm.getAttribute("enctype"))
                       form.setAttribute("enctype", pForm.getAttribute("enctype"));
                   else
                       form.setAttribute("enctype", document.forms["aspnetForm"].getAttribute("enctype"));
                   form.setAttribute("encoding", document.forms["aspnetForm"].getAttribute("encoding"));

                   form.appendChild(pForm);

                   sender = sender.target || sender.srcElement;
                   if(sender)
                   {
                       var submitHiddenInput = document.createElement("input");
                       submitHiddenInput.setAttribute("type", "hidden");
                       submitHiddenInput.setAttribute("name", sender.name);                                
                       submitHiddenInput.setAttribute("value", sender.value || "Submit");
                       form.appendChild(submitHiddenInput);
                   }

                   document.body.appendChild(form);


                   form.submit();
                   return false;
               }
           };
           var handleFormSubmitElements = function (elementName) {
               var allSubmitElements = container.getElementsByTagName(elementName);
               var elementCount = allSubmitElements.length;
               while(elementCount) {
                   typeAttr = allSubmitElements[elementCount - 1].getAttribute("type");
                   if(typeAttr == "submit") {
                       var currentClick = allSubmitElements[elementCount - 1].onclick;
                       if (currentClick)
                           allSubmitElements[elementCount - 1].onclick = function () { if (currentClick()) return submitClick(); else return false; };
                       else
                           allSubmitElements[elementCount - 1].onclick = submitClick;
                   }
                   elementCount--;
               }
           };
           handleFormSubmitElements("input");
           handleFormSubmitElements("textarea");
           handleFormSubmitElements("select");
           handleFormSubmitElements("button");
        }
   })();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43665881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档