首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法正确使用Ajax和JSF的Scriptaculous

无法正确使用Ajax和JSF的Scriptaculous
EN

Stack Overflow用户
提问于 2016-06-07 21:45:39
回答 1查看 88关注 0票数 0

我有一个select下拉菜单,其中一个onChange事件将触发一个Ajax调用来重新填充表单,然后调用javascript函数init(),它将根据新的数据重新排序表单中的可排序div。使用调试器,我发现在完成init()之后,div将按预期的顺序排序,但随后它将执行:

代码语言:javascript
复制
responder = function(event) {
      Event.extend(event, element);
      handler.call(element, event);
    };

在函数函数_createResponder(element,eventName,处理程序)中prototype.js中的,然后执行

代码语言:javascript
复制
return !scope ? method : function() {
        return method.apply(scope, arguments || []);
    }; // Function

在函数function(/Object/scope,/Function|String/method /、.../) in jsf.js中,将div重置回原来的顺序。

下面是我的facelet中的一个简化代码片段:

代码语言:javascript
复制
<body onload="init()">
    <form id="MaintainPreferencesBean">
        <t:selectOneMenu id="selectLayout" value="#{maintainPreferencesBean.layoutIndex}">
            <f:selectItems value="#{maintainPreferencesBean.layoutNames}" />
            <f:ajax listener="#{maintainPreferencesBean.setLayout}" render="@form" onevent="init()" />
        </t:selectOneMenu>
        <div id="sortable">
            <div id="demoGroup" class="dataGroup"></div>
            <div id="offenseGroup" class="dataGroup"></div>
        </div>
    </form>
</body>

以下是javascript:

代码语言:javascript
复制
function init() {
    changeOrder("sortable", "dataGroup", document.getElementById("MaintainPreferencesBean:selectLayout").selectedIndex);
    Sortable.create("sortable", {
    tag : 'div'
    });
}

function changeOrder(container, className, layoutIndex) {
    var divs = document.getElementById(container).getElementsByClassName(
        className);
    for ( var i = 0; i < groupNamesArray.length; i++) {
        var div = document
            .getElementById(groupNamesArray[desiredOrder[layoutIndex][i]]);
        var insPt = divs[i];
        if (insPt != null && insPt != div)
        insPt.parentNode.insertBefore(div, insPt);
    }
}

注意,在非Ajax页面刷新时,div确实得到了正确的排序。另外,当我使用valueChangeListener (通常的阶段解决方案)而不是Ajax时,排序也是有效的。

EN

回答 1

Stack Overflow用户

发布于 2016-06-08 00:44:46

结果,我需要指定何时执行javascript。

更多信息可以在这里找到:How to re-execute javascript function after form reRender?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37689922

复制
相关文章

相似问题

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