[ 
https://issues.apache.org/jira/browse/WICKET-5432?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13837601#comment-13837601
 ] 

Martin Grigorov commented on WICKET-5432:
-----------------------------------------

Actually since Wicket.Event.isIE() doesn't count IE 11 as IE the code uses 
'input' event, instead of cut/paste/keyup. So this is OK-ish.

The problem is that IE 11 fires oninput as soon as the input field is focused. 
Your code repaints the whole table, including the filtering input field, and 
this leads to a new focus event on the filtering input and this to a new Ajax 
call and ...

A simple way to stop it is to use target.focusComponent(null); in 
OnChangeAjaxBehavior#onUpdate(). But this makes the user experience bad.

I'll think on a workaround.

> OnChangeAjaxBehavior continually triggered in IE11
> --------------------------------------------------
>
>                 Key: WICKET-5432
>                 URL: https://issues.apache.org/jira/browse/WICKET-5432
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 6.12.0
>         Environment: Internet Explorer 11
>            Reporter: David Lock
>         Attachments: wicket-quickstart.7z
>
>
> I have a DataTable with a single column.  The table has a toolbar assigned 
> which provides sorting and filtering. 
> The filtering is done via TextField that has the following 
> OnChangeAjaxBehavior assigned. 
> OnChangeAjaxBehavior onChangeAjaxBehavior = new OnChangeAjaxBehavior() 
> { 
>     @Override 
>     protected void onUpdate(AjaxRequestTarget target) 
>     { 
>          FilteredLazyLoadingDataProvider<T, S> provider = 
>              (FilteredLazyLoadingDataProvider<T, S>) 
> dataTable.getDataProvider(); 
>          provider.filter(FilterAjaxFallbackOrderByBorder.this); 
>                     
>          target.add(dataTable); 
>          target.appendJavaScript("moveCaretToEnd(document.getElementById('" + 
> m_filter.getMarkupId() + "'))"); 
>     } 
>                 
>     @Override 
>     protected void updateAjaxAttributes(AjaxRequestAttributes attributes) 
>     { 
>          super.updateAjaxAttributes(attributes); 
>          attributes.setThrottlingSettings(new ThrottlingSettings(id, 
> Duration.milliseconds(200), true)); 
>      } 
> }; 
> When I view a page in Chrome/Firefox everything works as expected.  When I 
> view the page in Internet Explorer 11 I observer the following issue. 
> If the filter textfield has focus and is empty, the 
> OnChangeAjaxBehavior.onUpdate method is continually called (ajax requests 
> spam the server).  As soon as I enter a value into the text field, the 
> filtering is performed and the ajax calls cease to spam the server. 
> What is interesting is if I create a simple form with just a textfield in and 
> assign the above OnChangeAjaxBehaviour, the textfield in the form does not 
> have the same issue as the one in the table header. 
> My app is deployed in Tomcat 7.0.30 (although the issue can also been seen 
> when testing via jetty) 
> _______________
> Response from Martin in the user forum....
> And the reason for the problem is at 
> https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js?source=c#L2620
> I guess IE 11 finally implements 'oninput' event for text inputs. This is 
> OK, we have to improve our #isIE() method to count IE 11 as evergreen 
> browser. 
> But it seems they broke somehow the other event listeners ... 



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to