]> source.dussan.org Git - jquery.git/commitdiff
Fix #10844. Harden quickIs() against form-aliasing of the id property.
authorDave Methvin <dave.methvin@gmail.com>
Mon, 21 Nov 2011 16:33:21 +0000 (11:33 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Mon, 21 Nov 2011 16:33:21 +0000 (11:33 -0500)
src/event.js
test/unit/event.js

index 57fe00cbe89759edfe29dc7e579d6af536a19320..4b841bbce27aab88d0eb738b629d8c030d72a289 100644 (file)
@@ -18,10 +18,11 @@ var rformElems = /^(?:textarea|input|select)$/i,
                return quick;
        },
        quickIs = function( elem, m ) {
+               var attrs = elem.attributes || {};
                return (
                        (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
-                       (!m[2] || elem.id === m[2]) &&
-                       (!m[3] || m[3].test( ((elem.attributes || {})[ "class" ] || {}).value ))
+                       (!m[2] || (attrs.id || {}).value === m[2]) &&
+                       (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
                );
        },
        hoverHack = function( events ) {
index eb5f98fb8409d08f7dedb255c21a210dca22502c..4ad8f9d85e31dd15f2397718a8b94d28242cd479 100644 (file)
@@ -1209,6 +1209,29 @@ test("Delegated events in SVG (#10791)", function() {
        svg.remove();
 });
 
+test("Delegated events in forms (#10844)", function() {
+       expect(1);
+
+       // Aliases names like "id" cause havoc
+       var form = jQuery(
+                       '<form id="myform">'+
+                       '<input type="text" name="id" value="secret agent man" />'+
+                       '</form>'
+               ).appendTo( "body" );
+       
+       jQuery( "body" )
+               .on( "submit", "#myform", function() {
+                       ok( true, "delegated id selector with aliased name" );
+                       return false;
+               })
+               .find( "#myform" )
+                       .trigger( "submit" )
+               .end()
+               .off( "submit" );
+
+       form.remove();
+});
+
 test("jQuery.Event( type, props )", function() {
 
        expect(5);