[
https://issues.apache.org/jira/browse/MYFACES-2586?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12841331#action_12841331
]
Werner Punz edited comment on MYFACES-2586 at 3/4/10 3:50 PM:
--------------------------------------------------------------
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 I gave it a testing on ie8 ie8 compatbilitymode ie7 mozilla, safari and
opera and so far the solution works out quite well, in case of auto eval the
problematic double dom entries are removed and in case of ie the eval is
triggered after the dom is in a clean state. I guess I will commit the fix.
was (Author: werpu):
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.