Tapestry 5
  1. Tapestry 5
  2. TAP5-1632

When a submit component does not have a specific id, the default id "submit" collides ont the client side with the HTMLFormElement.submit() method, causing JavaScript errors when the form is submitted

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 5.3, 5.2.5
    • Fix Version/s: 5.3
    • Component/s: tapestry-core
    • Labels:

      Description

      "cancel" mode of submit component is not submit to server, if we don't give t:id attribute on Submit component.

      Steps to reproduce:
      <t:form t:id="form">
      <t:textfield t:id="testField" t:value="testField" t:validate="required" />
      <t:submit value="normal submit"/>
      <t:submit mode="cancel" value="cancel submit"/>
      </t:form>
      When clicking on "cancel submit", nothing happen (form is not submitted to server).

      --------------------
      Workaround from Josh Canfield is to give t:id attribute on Submit component:
      <t:form t:id="form">
      <t:textfield t:id="testField" t:value="testField" t:validate="required" />
      <t:submit t:id="normalSubmit" value="normal submit"/>
      <t:submit t:id="cancelSubmit" mode="cancel" value="cancel submit"/>
      </t:form>

      --------------------
      This is caused by tapestry gives default id 'submit' to the Submit component.
      Tapestry should never give default id 'submit' to the Submit component to avoid this defect.

        Activity

        Hide
        Howard M. Lewis Ship added a comment -

        This is odd:

        Using dev tools I can see a reasonable name and id for the element:

        <input value=​"Cancel Form" id=​"submit" name=​"cancel" type=​"submit">​

        So cancel is a property of the form:

        $('form').cancel --> <input value=​"Cancel Form" id=​"submit" name=​"cancel" type=​"submit">​

        But so is submit:

        $('form').cancel --> <input value=​"Cancel Form" id=​"submit" name=​"cancel" type=​"submit">​

        This is not how I thought HTMLFormElement properties worked; I thought the names were used, but it's looking like names and ids.

        I'm seeing the same behavior in both FireFox and Chrome.

        Show
        Howard M. Lewis Ship added a comment - This is odd: Using dev tools I can see a reasonable name and id for the element: <input value=​"Cancel Form" id=​"submit" name=​"cancel" type=​"submit">​ So cancel is a property of the form: $('form').cancel --> <input value=​"Cancel Form" id=​"submit" name=​"cancel" type=​"submit">​ But so is submit: $('form').cancel --> <input value=​"Cancel Form" id=​"submit" name=​"cancel" type=​"submit">​ This is not how I thought HTMLFormElement properties worked; I thought the names were used, but it's looking like names and ids. I'm seeing the same behavior in both FireFox and Chrome.
        Hide
        Hudson added a comment -

        Integrated in tapestry-trunk-freestyle #507 (See https://builds.apache.org/job/tapestry-trunk-freestyle/507/)
        TAP5-1632: When a submit component does not have a specific id, the default id "submit" collides ont the client side with the HTMLFormElement.submit() method, causing JavaScript errors when the form is submitted

        hlship : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1166423
        Files :

        • /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java
        • /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java
        • /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalSymbols.java
        • /tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js
        • /tapestry/tapestry5/trunk/tapestry-core/src/test/app1/CanceledEventDemo.tml
        • /tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/CanceledEventTests.groovy
        • /tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/FormTests.java
        • /tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/CanceledEventDemo.java
        • /tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java
        Show
        Hudson added a comment - Integrated in tapestry-trunk-freestyle #507 (See https://builds.apache.org/job/tapestry-trunk-freestyle/507/ ) TAP5-1632 : When a submit component does not have a specific id, the default id "submit" collides ont the client side with the HTMLFormElement.submit() method, causing JavaScript errors when the form is submitted hlship : http://svn.apache.org/viewcvs.cgi/?root=Apache-SVN&view=rev&rev=1166423 Files : /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/Form.java /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/corelib/components/LinkSubmit.java /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/InternalSymbols.java /tapestry/tapestry5/trunk/tapestry-core/src/main/resources/org/apache/tapestry5/tapestry.js /tapestry/tapestry5/trunk/tapestry-core/src/test/app1/CanceledEventDemo.tml /tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/app1/CanceledEventTests.groovy /tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/FormTests.java /tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/CanceledEventDemo.java /tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/Index.java

          People

          • Assignee:
            Howard M. Lewis Ship
            Reporter:
            Yohan Yudanara
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development