Ticket #3113 (closed bug: duplicate)
unexpected attr behavior on form with input element named 'action'
| Reported by: | rryan | Owned by: | flesler |
|---|---|---|---|
| Priority: | low | Milestone: | 1.3 |
| Component: | attributes | Version: | 1.2.6 |
| Keywords: | attr | Cc: | |
| Blocking: | Blocked by: |
Description
Given the following form:
<form action="someaction"> <input type="hidden" name="action" value="somevalue"/> </form>
If you have the dom element for the form, 'f'.
f.action = "foo", sets the value of the input element, not the action attribute on the form.
f.setAttribute("action","foo") sets the action attribute on the form tag.
In jQuery, if you say $("#form").attr("action","foo"), it actually sets the input element named action to 'foo', instead of setting the attribute on the form tag. Is this a bug? 'attr' would seem to imply the functionality of 'setAttribute', not this magic 'action' accessor on the dom element.
Thanks for all your hard work!
Attachments
Change History
comment:1 Changed 5 years ago by flesler
- need changed from Review to Patch
- Owner set to flesler
- Status changed from new to assigned
comment:2 Changed 5 years ago by mw44118
Slightly related: it seems impossible to select a form by using the action attribute; e.g.,
<form action="x"> </form>
$("form[action='x']") will return an empty set of nodes.
comment:4 Changed 4 years ago by malsup
This probably applies to any form attribute. I've confirmed action, method, and target. I suspect others will fall into this category as well, such as enctype and accept. Perhaps even coreattrs like title.
comment:5 Changed 4 years ago by hakre
I was able to help myself by using
$("#formid").get(0).setAttribute("action", action);
where action is a variable containing the action value to be set.
Anyway, this is a Bug I would love to see fixed because the jQuery function does not what it is supposed to be. Since jQuery adds a Layer on the standard Javascript Implementation, it should cirumvent the Problem(s) that the Browsers Javascript Implementation has in this case.
comment:8 Changed 3 years ago by webapp
I guess this is directly related : you can't (at least with Firefox 3.6) select a form by any of its attribute, if any field in the form has the name of the attribute.
For an exemple, if a form has an attribute 'autosubmit="yes"' and a input whose name is "autosubmit", $('form[autosubmit=yes]') doesn't select it. $('form[autosubmit]') selects it, though (the value of the input is probably used instead of the value of the attribute).
comment:10 Changed 3 years ago by Eddie Monge
Test case for the attr not being set: http://jsfiddle.net/eTiger13/j35Xc/2/ Similiar to this but without the input having the name of action: http://jsfiddle.net/eTiger13/j35Xc/3/
Only affects FF
comment:11 Changed 2 years ago by timmywil
This is fixed with the attrhooks updates. https://github.com/jquery/jquery/pull/265
comment:12 Changed 2 years ago by rwaldron
- Priority changed from minor to low
- Status changed from assigned to closed
- Resolution set to duplicate
comment:13 Changed 2 years ago by rwaldron
Duplicate of #7212.
Please follow the bug reporting guidlines and use jsFiddle when providing test cases and demonstrations instead of pasting the code in the ticket.


This was already spotted, we do have a solution in mind. We'll review this for 1.3.