[ https://issues.apache.org/jira/browse/WICKET-2739?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12898668#action_12898668 ]
Michael Brinkman commented on WICKET-2739: ------------------------------------------ Interestingly, I'm seeing this issue manifest as a precondition failure running Wicket 1.4.9 on IE8, but not on FF3.6.8 (opposite browser compatibility issue). In the IE JS debugger I tracked it back to the same basic root cause where the element passed in to 'Wicket.&&' is clearly not the form component the behavior was added to. The only thing I'll add to Russell's description of the issue and suggested fix is that I was able to work around this by altering the precondition script to be entirely name based, instead of using a reference to a DOM element: AjaxFormValidatingBehavior behavior = new AjaxFormValidatingBehavior(myForm, "onblur") { protected CharSequence getPreconditionScript() { return "return Wicket.$$('" + ((FormComponent<?>)getComponent()).getInputName() + "')&&Wicket.$$('" + getForm().getMarkupId() + "')"; } }; I'm still pretty new to Wicket though, so I'm not sure if the form validating behavior is intended to be added to anything other than a FormComponent. If it is, then obviously this wouldn't be a very desirable fix. > Throttling breaks AjaxFormSubmitBehavior's precondition check > ------------------------------------------------------------- > > Key: WICKET-2739 > URL: https://issues.apache.org/jira/browse/WICKET-2739 > Project: Wicket > Issue Type: Bug > Components: wicket > Affects Versions: 1.4.5 > Environment: wicket 1.4.5, wicket quickstart, windows XP; FireFox > 3.5.7 used in quickstart test > Reporter: Russell Morrisey > Attachments: throttleBreaksPrecondition.zip > > > AjaxFormSubmitBehavior#getPreconditionScript() looks like: > return "return Wicket.$$(this)&&Wicket.$$('" + getForm().getMarkupId() + "')"; > The javascript keyword 'this' should point to the DOM element which initiated > the ajax event. (It wants to check that the component still exists on the > page, before initiating the ajax request, as well as the form this behavior > is linked to). When using an AjaxThrottlingCallDecorator to throttle the ajax > request, the throttle callback function is not bound to the DOM element. The > result is that 'this' refers to the window element, in the context of the > throttle callback. The precondition function gets bind(this) called on it, > but it's the wrong 'this'. I think that the throttle callback should be bound > to 'this' at the time the callback is defined. > AbstractDefaultAjaxBehavior#throttleScript(...) should be changed from: > return new AppendingStringBuffer("wicketThrottler.throttle( > '").append(throttleId) > .append("', ") > .append(throttleDelay.getMilliseconds()) > .append(", function() { ") > .append(script) > .append("});"); > to: > return new AppendingStringBuffer("wicketThrottler.throttle( > '").append(throttleId) > .append("', ") > .append(throttleDelay.getMilliseconds()) > .append(", function() { ") > .append(script) > .append("}.bind(this));"); -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.