我有一个子表单,我通过ajax获取并附加到我的主表单。在服务器端,我将子表单包装在一个带有'collapsible'和'collapsed'类的字段集中,drupal_render数组,并将其传回json(SOP)。在前端,我可以使用以下代码获得可折叠的行为:
jQuery('#my-fieldset legend span').click(function(){
Drupal.toggleFieldset(jQuery('#my-fieldset'));
});
这样可行,但似乎不是正确的方法。我尝试使用此代码附加行为:
Drupal.behaviors.collapse.attach(jQuery('#my-fieldset'), Drupal.settings);
和
Drupal.behaviors.collapse.attach(jQuery('#my-fieldset'));
但未正确应用该行为。
那么手动初始化此行为的正确方法是什么?
TIA
我想我已经明白了:
Drupal.behaviors.collapse.attach(jQuery(document), Drupal.settings);
解
THanks prabeen giri! Drupal.attachBehaviors更有意义......
我用drupal.attachBehaviors()进行了测试,但也许我没有正确使用它。我认为我传递一个jquery对象作为上下文而不仅仅是选择器,如你提到的示例帖子中所示,如果这有所不同。我会更多地玩它。
我也不熟悉load()方法,这对我的传统方法来说是一个很好的简写...
jQuery.ajax({
url: Drupal.settings.basePath + url,
type: 'POST',
data: data,
dataType: 'json',
success: function(response){
if (response.status != undefined && response.data != undefined && response.status == 'ok') {
callback(response.data);
}
return false;
}
});
感谢您的见解。非常有帮助。
(我向你投票,但我没有代表)
答案 0 :(得分:0)
Drupal.attachBehaviors()
是在Drupal7中手动附加行为的方法
您可以在此处查看https://drupal.org/node/1143768以供参考。
<强>更新强>
AttachBehaviours被调用完成任何ajax请求。因此,它重新调用内部的所有内容
Drupal.behaviours.myModule = {
attach : {
// your code here
// Code here will get executed on page load and every ajax request
new Drupal.MyMenuList() // this will attache events and handles it
}
}
让我们假设您正在使用一些构造函数对象来附加事件,处理事件以及其他诸如
之类的东西Drupal.MyMenuList = function () {
$('#asdf').click(function() {
//
});
}
Drupal.MyMenuList.prototype.click = function (){
// event handler
}
如果您不想使用上述附加行为,则可以使用Drupal.attachBehaviours(new Drupal.MyMenuList())
再次应用相同的行为。