[ 
https://issues.apache.org/jira/browse/WICKET-1914?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Igor Vaynberg resolved WICKET-1914.
-----------------------------------

       Resolution: Fixed
    Fix Version/s: 1.4-RC2
                   1.3.6
         Assignee: Igor Vaynberg

> Form.appendDefaultButtonField produces invalid JavaScript if Ajax is disabled
> -----------------------------------------------------------------------------
>
>                 Key: WICKET-1914
>                 URL: https://issues.apache.org/jira/browse/WICKET-1914
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 1.3.4, 1.3.5
>            Reporter: Matthias Keller
>            Assignee: Igor Vaynberg
>             Fix For: 1.3.6, 1.4-RC2
>
>
> Form.appendDefaultButtonField produces a line like this:
> <input type="submit" name="buttons:next" onclick=" var b=Wicket.$('next2'); 
> if (typeof(b.onclick) != 'undefined') {  var r = b.onclick.bind(b)(); if (r 
> != false) b.click(); } else { b.click(); };  return false;"  />
> If Ajax is disabled,  var b=Wicket.$('next2')  is invalid, as Wicket  is not 
> defined. I'm not familiar with what the bind() method does or whether it is 
> needed or not, but the error is ugly and appears whenever a user tries to 
> submit a Form by pressing Enter instead of clicking on the submit button.
> My proposed fix uses getElementById to get a reference to the submit 
> component. Which requires that the markup ID is present.
> This can either be done on the fly inside  appendDefaultButtonField()  or 
> maybe better in  setDefaultButton().
> Here's the fix that works for me on non-ajax pages:
>       protected void appendDefaultButtonField (MarkupStream markupStream, 
> ComponentTag openTag) {
>                               
>                               AppendingStringBuffer buffer = new 
> AppendingStringBuffer();
>                               // div that is not visible (but not 
> display:none either)
>                               buffer.append("<div 
> style=\"width:0px;height:0px;position:absolute;left:-100px;top:-100px;overflow:hidden\">");
>                               // add an empty textfield (otherwise IE doesn't 
> work)
>                               buffer.append("<input type=\"text\" 
> autocomplete=\"false\"/>");
>                               // add the submitting component
>                               final Component submittingComponent = 
> (Component) getDefaultButton();
>                               submittingComponent.setOutputMarkupId(true);
>                               
>                               buffer.append("<input type=\"submit\" name=\"");
>                               
> buffer.append(getDefaultButton().getInputName());
>                               buffer.append("\" onclick=\" var 
> b=document.getElementById('");
>                               
> buffer.append(submittingComponent.getMarkupId());
>                               buffer.append("'); if (b) { if 
> (typeof(b.onclick) != 'undefined') { var r = b.onclick.bind(b)(); if (r != 
> false) b.click(); } else { b.click(); }  return false;}\"");
>                               buffer.append(" />");
>                               
>                               // close div
>                               buffer.append("</div>");
>                               getResponse().write(buffer);
>                       }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to