f = o;
o = null;
}
- if (o !== null) {
+ if (typeof o !== 'undefined') {
o = $.param(o);
t = "POST";
}
h = h.responseText;
self.html(h).find("script").each(function(){
try {
- $.eval( this.text || this.textContent || this.innerHTML );
+ $.eval( this.text || this.textContent || this.innerHTML || "");
} catch(e){}
});
if(f){f(h);}
*/
$.fn.formValues = function(sButton) {
var a = [];
- var elp = {INPUT:true, TEXTAREA:true, OPTION:true};
+ var ok = {INPUT:true, TEXTAREA:true, OPTION:true};
// Loop the shite
$('*', this).each(function() {
- // Skip elements not of the types in elp
- if (!elp[this.tagName])
+ // Skip elements not of the types in ok
+ if (!ok[this.tagName.toUpperCase()])
return;
// Skip disabled elements
if (this.disabled)
return;
- // Skip non-selected nodes
- if ((this.parentNode.nodeName == 'SELECT') && (!this.selected))
+ // Skip submit buttons and image elements
+ if ((this.type == 'submit') || (this.type == 'image'))
+ return;
+
+ // Skip non-selected options
+ var oParent = this.parentNode;
+ var sNn = oParent.nodeName.toUpperCase();
+ if (((sNn == 'SELECT') || (sNn == 'OPTGROUP')) && (!this.selected))
return;
// Skip non-checked nodes
if (((this.type == 'radio') || (this.type == 'checkbox')) && (!this.checked))
return;
- // If we come here, everything is fine, so add the data
- a.push({
- name: this.name || this.id || this.parentNode.name || this.parentNode.id,
- value: this.value
- });
+ // If we come here, everything is fine
+ var sKey = this.name || this.id || oParent.name || oParent.id;
+ var sValue = this.value;
+
+ // If we don't have an ID, and the parent is an OPTGROUP,
+ // get the NAME or ID of the OPTGROUP's parent
+ if ((!sKey) && (sNn == 'OPTGROUP') && (oParent = oParent.parentNode))
+ sKey = oParent.name || oParent.id;
+
+ // Add the data
+ a.push({ name: sKey, value: sValue });
});
// Add submit button if needed
- if (sButton && (sButton !== null))
- a.push({ name: sButton, value: 'x' });
+ if (sButton && (sButton !== null)) {
+ var el = $(sButton).get(0);
+ a.push({
+ name: el.name || el.id || el.parentNode.name || el.parentNode.id,
+ value: el.value
+ });
+ }
+ // Done
return a;
};
// Evaluate the scripts AFTER this (so you can allready modify the new HTML!)
el.html(sResult).find("script").each(function(){
- try { $.eval( this.text || this.textContent || this.innerHTML ); } catch(e) { }
+ try { $.eval( this.text || this.textContent || this.innerHTML || "" ); } catch(e) { }
});
// And call the callback handler :)