From e597ccb381913308ce4c31662c8eba67509f8c1a Mon Sep 17 00:00:00 2001 From: Kin Blas Date: Fri, 6 May 2011 13:05:56 -0700 Subject: [PATCH] Fix for issue 1580 - phonegap: Pages with data-ajax="false" on form fail to load In the $.ajax() callback, we look for elements with @href, @src, and @data-ajax="false" elements, the code then assumes that matching elements will have either @href or @src, which of course forms don't ... they have @action ... so the code throws an exception because thisUrl is undefined. - I reworked the code to handle action and check to make sure we have an attribute and url string before attempting to use them. --- js/jquery.mobile.navigation.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/js/jquery.mobile.navigation.js b/js/jquery.mobile.navigation.js index 2f978e0a..e5e62033 100644 --- a/js/jquery.mobile.navigation.js +++ b/js/jquery.mobile.navigation.js @@ -606,14 +606,27 @@ if( !$.support.dynamicBaseTag ) { var newPath = path.get( fileUrl ); to.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each( function() { - var thisAttr = $( this ).is( "[href]" ) ? "href" : "src", - thisUrl = $( this ).attr( thisAttr ); + var attrs = [ "href", "src", "action" ], + thisAttr = undefined, + thisUrl = undefined; - //if full path exists and is same, chop it - helps IE out - thisUrl = thisUrl.replace( location.protocol + "//" + location.host + location.pathname, "" ); + for (var i = 0; i < attrs.length; i++) { + var a = attrs[i], + v = $( this ).attr( a ); + if (v) { + thisAttr = a; + thisUrl = v; + break; + } + } - if( ! /^(\w+:|#|\/)/.test( thisUrl ) ) { - $( this ).attr( thisAttr, newPath + thisUrl ); + if ( thisAttr && thisUrl ) { + //if full path exists and is same, chop it - helps IE out + thisUrl = thisUrl.replace( location.protocol + "//" + location.host + location.pathname, "" ); + + if( ! /^(\w+:|#|\/)/.test( thisUrl ) ) { + $( this ).attr( thisAttr, newPath + thisUrl ); + } } }); }