我正在使用 Sitecore 8 Update 2 制作一个页面,人们可以在其中留下一些个人信息。如果用户登录,则会为其填写信息。 (标准mvc 5形式)
我添加了一个 WFFM(8.0 rev 141217)登录表单(如果成功,页面将重新加载并且所有字段都已填写),但是当包含此代码时,它会弄乱 Jquery。
@Html.Sitecore().Placeholder("form")
我仍然可以看到 jquery 文件已加载到浏览器中,但“Jquery”变量现在未定义。 (我在该页面上运行了一堆 Jquery)
我可以采取什么措施来防止这种情况发生,或者如何找出导致这种情况的原因?
编辑:
我找到了一切都变坏的代码。 该函数完成后,Jquery 变量未定义。但据我所知,这段代码是作为 WFFM 的一部分添加的。 (与 html 元素内联)
<script type="text/javascript">
if (typeof ($scw) === "undefined") {
window.$scw = jQuery.noConflict(true);
}
$scw(document).ready(function () {
$scw("#LVn73Spq0EGYvPQZ7-bA5Q").eventTracking({ pageId: "{55D3F49D-6EDA-43FB-81F1-191D34F896D4}", rules: "{"*":"{844BBD40-91F6-42CE-8823-5EA4D089ECA2}","regex":"{F3D7B20C-675C-4707-84CC-5E5B4481B0EE}","length":"{F3D7B20C-675C-4707-84CC-5E5B4481B0EE}","required":"{7E86B2F5-ACEC-4C60-8922-4EB5AE5D9874}"}" });
});
</script>
最佳答案
您需要在表单中包含 WFFM 脚本包。您可以通过在 /Views/Form/Index.cshtml
@Scripts.Render("~/bundles/wffm/jquery")
@Scripts.Render("~/bundles/wffm/scripts")
@Styles.Render("~/content/wffm/jquery")
@Styles.Render("~/content/wffm/themes")
您只需要包含前两个,其他使用 jQuery UI 主题添加默认样式,然后您可以覆盖它们(或不包含它们并自行设置它们的样式)。
js错误的原因是jQuery.noConflict(true)
从范围内重置了jQuery名称。 WFFM noConflict 调用会删除最后加载的 jQuery 库,在本例中,该库是您在页面前面手动加载的脚本,并且由于它是唯一的 jQuery 库,因此没有任何可回退的内容。
If necessary, you can free up the jQuery name as well by passing true as an argument to the method. This is rarely necessary, and if you must do this (for example, if you need to use multiple versions of the jQuery library on the same page)
参见jQuery.noConflict()和 this blog post有关加载两个版本的 jQuery 的更多详细信息
如果您确定加载的 jQuery 版本与 WFFM 加载版本兼容,那么您可以简单地设置 window.$scw = jQuery;
但您仍然需要加载脚本包,因为它包括表单特定的功能。
关于javascript - 添加 WFFM 表单 - Jquery 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31680795/