- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我面临着一个特殊的问题。我的Drupal网站使用Jquery 1.4.4版本。
众所周知,Drupal 输出 Drupal.settings
json 转为 Javascript:
当我启用devel_themer
时模块:
以下是输出
jQuery.extend(Drupal.settings, {
"basePath":"\/d7\/",
"pathPrefix":"",
"ajaxPageState":{
"theme":"bartik",
"theme_token":"KC2-1Z9CN5PCxDyAq_W8FGBQBOOnwt8AyoeX1UDBoP8",
"js":{
"misc\/jquery.js":1,
"misc\/jquery.once.js":1,
"misc\/drupal.js":1,
"misc\/ui\/jquery.ui.core.min.js":1,
"misc\/ui\/jquery.ui.widget.min.js":1,
"misc\/jquery.cookie.js":1,
"misc\/jquery.form.js":1,
"misc\/ui\/jquery.ui.mouse.min.js":1,
"misc\/ui\/jquery.ui.draggable.min.js":1,
"misc\/ui\/jquery.ui.resizable.min.js":1,
"misc\/jquery.ba-bbq.js":1,
"modules\/overlay\/overlay-parent.js":1,
"misc\/ajax.js":1,
"misc\/progress.js":1,
"sites\/all\/modules\/devel_themer\/devel_themer.js":1,
"sites\/all\/modules\/devel\/krumo\/krumo.js":1,
"modules\/toolbar\/toolbar.js":1,
"sites\/all\/modules\/devel\/devel_krumo_path.js":1
},
"css":{
"modules\/system\/system.base.css":1,
"modules\/system\/system.menus.css":1,
"modules\/system\/system.messages.css":1,
"modules\/system\/system.theme.css":1,
"misc\/ui\/jquery.ui.core.css":1,
"misc\/ui\/jquery.ui.theme.css":1,
"misc\/ui\/jquery.ui.resizable.css":1,
"modules\/overlay\/overlay-parent.css":1,
"modules\/comment\/comment.css":1,
"modules\/field\/theme\/field.css":1,
"modules\/node\/node.css":1,
"modules\/search\/search.css":1,
"modules\/user\/user.css":1,
"sites\/all\/modules\/devel_themer\/devel_themer.css":1,
"sites\/all\/modules\/devel\/krumo\/skins\/default\/skin.css":1,
"modules\/shortcut\/shortcut.css":1,
"modules\/toolbar\/toolbar.css":1,
"sites\/all\/modules\/devel_themer\/devel_themer_ie_fix.css":1,
"themes\/bartik\/css\/layout.css":1,
"themes\/bartik\/css\/style.css":1,
"themes\/bartik\/css\/colors.css":1,
"themes\/bartik\/css\/print.css":1,
"themes\/bartik\/css\/ie.css":1,
"themes\/bartik\/css\/ie6.css":1
}
},
"thmrStrings":{
"themer_info":"Themer info",
"toggle_throbber":" \u003Cimg src=\u0022\/d7\/sites\/all\/modules\/devel_themer\/loader-little.gif\u0022 alt=\u0022loading\u0022 class=\u0022throbber\u0022 width=\u002216\u0022 height=\u002216\u0022 style=\u0022display:none\u0022 \/\u003E",
"parents":"Parents: ",
"function_called":"Function called: ",
"template_called":"Template called: ",
"candidate_files":"Candidate template files: ",
"preprocessors":"Preprocess functions: ",
"processors":"Process functions: ",
"candidate_functions":"Candidate function names: ",
"drupal_api_docs":"link to Drupal API documentation",
"source_link_title":"link to source code",
"function_arguments":"Function Arguments",
"template_variables":"Template Variables",
"file_used":"File used: ",
"duration":"Duration: ",
"api_site":"http:\/\/api.drupal.org\/",
"drupal_version":"7",
"source_link":"\/d7\/devel\/source?file="
},
"thmr_popup":" \u003Cdiv id=\u0022themer-fixeder\u0022\u003E\n \u003Cdiv id=\u0022themer-relativer\u0022\u003E\n \u003Cdiv id=\u0022themer-popup\u0022\u003E\n \u003Cdiv class=\u0022topper\u0022\u003E\n \u003Cspan class=\u0022close\u0022\u003EX\u003C\/span\u003E Drupal Themer Information\n \u003C\/div\u003E\n \u003Cdiv id=\u0022parents\u0022 class=\u0022row\u0022\u003E\n\n \u003C\/div\u003E\n \u003Cdiv class=\u0022info row\u0022\u003E\n \u003Cdiv class=\u0022starter\u0022\u003EClick on any element to see information about the Drupal theme function or template that created it.\u003C\/div\u003E\n \u003Cdl\u003E\n \u003Cdt class=\u0022key-type\u0022\u003E\n\n \u003C\/dt\u003E\n \u003Cdd class=\u0022key\u0022\u003E\n\n \u003C\/dd\u003E\n \u003Cdiv class=\u0022used\u0022\u003E\n \u003C\/div\u003E\n \u003Cdt class=\u0022candidates-type\u0022\u003E\n\n \u003C\/dt\u003E\n \u003Cdd class=\u0022candidates\u0022\u003E\n\n \u003C\/dd\u003E\n\n \u003Cdt class=\u0022preprocessors-type\u0022\u003E\n\n \u003C\/dt\u003E\n \u003Cdd class=\u0022preprocessors\u0022\u003E\n\n \u003C\/dd\u003E\n \u003Cdt class=\u0022processors-type\u0022\u003E\n\n \u003C\/dt\u003E\n \u003Cdd class=\u0022processors\u0022\u003E\n\n \u003C\/dd\u003E\n \u003Cdiv class=\u0022duration\u0022\u003E\u003C\/div\u003E\n \u003C\/dl\u003E\n \u003C\/div\u003E\u003C!-- \/info --\u003E\n \u003Cdiv class=\u0022attributes row\u0022\u003E\n \u003Cdiv class=\u0022themer-variables\u0022\u003E\u003C\/div\u003E\n \u003C\/div\u003E\u003C!-- \/attributes --\u003E\n \u003C\/div\u003E\u003C!-- \/themer-popup --\u003E\n \u003C\/div\u003E\n \u003C\/div\u003E",
"overlay":{
"paths":{
"admin":"node\/*\/edit\nnode\/*\/delete\nnode\/*\/revisions\nnode\/*\/revisions\/*\/revert\nnode\/*\/revisions\/*\/delete\nnode\/add\nnode\/add\/*\noverlay\/dismiss-message\nuser\/*\/shortcuts\nadmin\nadmin\/*\nbatch\ntaxonomy\/term\/*\/edit\nuser\/*\/cancel\nuser\/*\/edit\nuser\/*\/edit\/*\ndevel\/*\nnode\/*\/devel\nnode\/*\/devel\/*\ncomment\/*\/devel\ncomment\/*\/devel\/*\nuser\/*\/devel\nuser\/*\/devel\/*\ntaxonomy\/term\/*\/devel\ntaxonomy\/term\/*\/devel\/*",
"non_admin":"admin\/structure\/block\/demo\/*\nadmin\/reports\/status\/php"
},
"pathPrefixes":[
],
"ajaxCallback":"overlay-ajax"
},
"tableHeaderOffset":"Drupal.toolbar.height"
});
在浏览器控制台中,如下面的屏幕截图所示 Drupal.settings
对象有一些奇怪的对象。
这有什么奇怪的?
如果我写Drupal.settings.thmrStrings
在控制台中,它显示未定义。但根据上述对象,应该是有的。根据 json 它没有显示这些有意义的对象,而是显示生成了一些奇怪的对象,例如 Drupal.settings.thmr_1
, Drupal.settings.thmr_2
, Drupal.settings.thmr_3
..Drupal.settings.thmr_94
。这些在哪里Drupal.settings.thmr_*
物体来自?它们不是在 json 中吗?为什么对象不符合 json?
您在屏幕截图中看到的错误就是由此引起的。 JavaScript 文件 devel_themer.js
正在访问 Drupal.settings.thmrStrings
的子对象但它没有得到它。这就是我支持这个的主要问题。
当我禁用 devel_themer
时模块:
以下是输出:
<script type="text/javascript">
<!--//--><![CDATA[//><!--
jQuery.extend(Drupal.settings, {
"basePath":"\/d7\/",
"pathPrefix":"",
"ajaxPageState":{
"theme":"bartik",
"theme_token":"KC2-1Z9CN5PCxDyAq_W8FGBQBOOnwt8AyoeX1UDBoP8",
"js":{
"misc\/jquery.js":1,
"misc\/jquery.once.js":1,
"misc\/drupal.js":1,
"misc\/ui\/jquery.ui.core.min.js":1,
"misc\/jquery.ba-bbq.js":1,
"modules\/overlay\/overlay-parent.js":1,
"modules\/contextual\/contextual.js":1,
"misc\/jquery.cookie.js":1,
"sites\/all\/modules\/devel\/devel_krumo_path.js":1,
"modules\/toolbar\/toolbar.js":1
},
"css":{
"modules\/system\/system.base.css":1,
"modules\/system\/system.menus.css":1,
"modules\/system\/system.messages.css":1,
"modules\/system\/system.theme.css":1,
"misc\/ui\/jquery.ui.core.css":1,
"misc\/ui\/jquery.ui.theme.css":1,
"modules\/overlay\/overlay-parent.css":1,
"modules\/contextual\/contextual.css":1,
"modules\/comment\/comment.css":1,
"modules\/field\/theme\/field.css":1,
"modules\/node\/node.css":1,
"modules\/search\/search.css":1,
"modules\/user\/user.css":1,
"modules\/shortcut\/shortcut.css":1,
"modules\/toolbar\/toolbar.css":1,
"themes\/bartik\/css\/layout.css":1,
"themes\/bartik\/css\/style.css":1,
"themes\/bartik\/css\/colors.css":1,
"themes\/bartik\/css\/print.css":1,
"themes\/bartik\/css\/ie.css":1,
"themes\/bartik\/css\/ie6.css":1
}
},
"overlay":{
"paths":{
"admin":"node\/*\/edit\nnode\/*\/delete\nnode\/*\/revisions\nnode\/*\/revisions\/*\/revert\nnode\/*\/revisions\/*\/delete\nnode\/add\nnode\/add\/*\noverlay\/dismiss-message\nuser\/*\/shortcuts\nadmin\nadmin\/*\nbatch\ntaxonomy\/term\/*\/edit\nuser\/*\/cancel\nuser\/*\/edit\nuser\/*\/edit\/*\ndevel\/*\nnode\/*\/devel\nnode\/*\/devel\/*\ncomment\/*\/devel\ncomment\/*\/devel\/*\nuser\/*\/devel\nuser\/*\/devel\/*\ntaxonomy\/term\/*\/devel\ntaxonomy\/term\/*\/devel\/*",
"non_admin":"admin\/structure\/block\/demo\/*\nadmin\/reports\/status\/php"
},
"pathPrefixes":[
],
"ajaxCallback":"overlay-ajax"
},
"tableHeaderOffset":"Drupal.toolbar.height"
});
//--><!]]>
</script>
在浏览器控制台中可以看到下图Drupal.settings
对象被正确解释。我的意思是,对象是按照 json 的。不存在像上述情况那样的奇怪物体。
问题:是什么导致了这种奇怪的行为?如何纠正?
最佳答案
Drupal devel_themer 模块在从服务器接收到 Drupal.settings JSON 响应后对其进行操作。 source code显示页面加载后 devel_themer 就会修改 Drupal.settings 值:
if (Drupal.jsEnabled) {
$(document).ready(function () {
lastObj = false;
thmrSpanified = false;
strs = Drupal.settings.thmrStrings;
$('body').addClass("thmr_call").attr("id", "thmr_" + Drupal.settings.page_id);
...
您应该能够通过在 devel_themer 之前定义另一个 $(document).ready 函数来访问未更改的原始 Drupal.settings。 document.ready() 回调按照注册顺序调用,因此您需要在代码中提前执行此操作。您已经有 jQuery 的依赖项,因此使用它来深度克隆对象...
if (Drupal.jsEnabled) {
$(document).ready(function(){
Drupal.originalSettings = jQuery.extend(true, {}, Drupal.settings);
// alert(Drupal.originalSettings.thmrStrings.themer_info);
// ... do your thing ...
});
}
您需要在加载 Drupal.settings 之后、dev_themer 模块初始化之前插入此 $(document).ready 函数。
关于jquery - jQuery 的解释是错误的吗?或者Drupal输出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22185793/
在带有 jQuery 的 CoffeeScript 中,以下语句有什么区别吗? jQuery ($) -> jQuery -> $ - > 最佳答案 第一个与其他两个不同,就像在纯 JavaScr
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭13 年前。 Improve th
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
这个问题可能听起来很愚蠢,但请耐心等待,因为我完全是初学者。我下载了两个 jQuery 版本,开发版本和生产版本。我想知道作为学习 jQuery 的初学者,什么更适合我。 最佳答案 如果您对 jQue
The documentation说要使用 1.6.4,但我们现在已经升级到 1.7.2。 我可以在 jQuery Mobile 中使用最新版本的 jQuery 吗? 最佳答案 您当然可以,但如果您想
我在这里看到这个不错的 jquery 插件:prettyphoto jquery lightbox有没有办法只用一个简单的jquery来实现这样的效果。 我只需要弹出和内联内容。你的回复有很大帮助。
很明显我正在尝试做一些 jQuery 不喜欢的事情。 我正在使用 javascript 上传图片。每次上传图片时,我都希望它可见,并附加一个有效的删除脚本。显示工作正常,删除则不然,因为当我用 fir
这两个哪个是正确的? jQuery('someclass').click(function() { alert("I've been clicked!"); }); 或 jQuery('somec
我正在寻找一个具有以下格式的插件 if (jQuery)(function ($) { -- plugin code -- })(jQuery); 我明白 (function ($)
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭10 年前。 Improv
我知道这个问题已经被问过几次了,但想知道您是否可以帮助我解决这个问题。 背景:我尝试创建一个使用 Ajax 提交的表单(jQuery 表单提交)。我已经工作得很好,然后我想在表单上得到验证。我可以使用
我正在使用无处不在的jquery validate plugin用于表单验证。它支持使用metadata plugin用于向表单元素添加验证规则。 我正在使用此功能。当验证查找这些规则时,它会对元素进
我更喜欢为我一直在开发的网络社区添加实用的视觉效果,但随着事情开始堆积,我担心加载时间。 拥有用户真的更快吗加载(希望是缓存的)副本来自 Google 存储库的 jquery? 是否使用 jQuery
这个问题已经有答案了: Slide right to left? (17 个回答) 已关闭 9 年前。 你能告诉我有没有办法在 jQuery 中左右滑动而不使用 jQuery UI 和 jQuery
我如何找出最适合某种情况的方法?任何人都可以提供一些示例来了解功能和性能方面的差异吗? 最佳答案 XMLHttpRequest 是原始浏览器对象,jQuery 将其包装成一种更有用和简化的形式以及跨浏
运行时 php bin/console oro:assets:build ,我有 11 个这样的错误: ERROR in ../node_modules/jquery-form/src/jquery.
我试图找到 jQuery.ajax() 在源代码中的定义位置。但是,使用 grep 似乎不起作用。 在哪里? 谢谢。 > grep jQuery.ajax src/* src/ajax.js:// B
$.fn.sortByDepth = function() { var ar = []; var result = $([]); $(this).each(function()
我的页面上有多个图像。为了检测损坏的图像,我使用了在 SO 上找到的这个。 $('.imgRot').one('error',function(){ $(this).attr('src','b
我在理解 $ 符号作为 jQuery 函数的别名时遇到了一些麻烦,尤其是在插件中。你能解释一下 jQuery 如何实现这种别名:它如何定义 '$' 作为 jQuery 函数的别名?这是第一个问题。 其
我是一名优秀的程序员,十分优秀!