[
https://issues.apache.org/jira/browse/MYFACES-2586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12841331#action_12841331
]
Werner Punz commented on MYFACES-2586:
--------------------------------------
Ok I think I have a solution, but I need a second eye to check it before commit
the insert code now should be as follows to trigger the right order:
if (newTag != "") {
var evalNode = null;
if (typeof window.Range != 'undefined'
&& typeof Range.prototype.createContextualFragment ==
'function') {
var range = document.createRange();
range.setStartBefore(item);
var fragment = range.createContextualFragment(newTag);
evalNode = item.parentNode.replaceChild(fragment, item);
} else {
item.insertAdjacentHTML('beforeBegin', newTag);
evalNode = item.previousSibling;
item.parentNode.removeChild(item);
}
// and remove the old item
//first we have to save the node newly insert for easier access
in our eval part
if (myfaces._impl._util._Utils.isManualScriptEval()) {
myfaces._impl._util._Utils.runScripts(request, context,
evalNode);
}
return;
}
// and remove the old item, in case of an empty newtag and do
nothing else
item.parentNode.removeChild(item);
We get a slightly different behavior on IE6 and ie7 due to having to revert to
insertAdjacentHTML due to lack of W3C range objects. (We should rethink
the usage of innerHTML for those browsers to get the same behavior), but since
neither ie6 and ie7 do any auto eval I can live with a slightly different
render behavior on those browsers for now.
Anyway please have a look at this and as soon as everyone agrees I can commit
this.
> wrong calling order for ajax script autorun
> -------------------------------------------
>
> Key: MYFACES-2586
> URL: https://issues.apache.org/jira/browse/MYFACES-2586
> Project: MyFaces Core
> Issue Type: Bug
> Components: JSR-314
> Affects Versions: 2.0.0-beta-2
> Environment: Javascript
> Reporter: Ganesh Jung
>
> First the new element is inserted, then the scripts are run, then the old
> element is removed. This is wrong, see this example:
> <h:inputText value="#{myBean.test}">
> <f:ajax render="test" />
> </h:inputText>
> <h:panelGroup id="test">
> <script type="text/javascript">
> alert("running");
> </script>
> <h:inputText value="#{myBean.test}" />
> </h:panelGroup>
> Correct order would be: First the new element is inserted, then the old
> element is removed, then the scripts are run.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.