You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2008/11/05 17:53:44 UTC

[jira] Resolved: (WICKET-1914) Form.appendDefaultButtonField produces invalid JavaScript if Ajax is disabled

     [ 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.