1 function requestUpdate(url, fieldName, targetName, targetFieldNames, elementPath) { 2 3 // If no field names exist as targets for the update, do not attempt to 4 // update them. 5 6 if (targetFieldNames == "") { 7 return; 8 } 9 10 // Note that XMLHttpRequest access may be denied if Mozilla believes that 11 // this resource's URL and the supplied URL are different. 12 13 var xmlhttp = new XMLHttpRequest(); 14 xmlhttp.open("POST", url, false); 15 16 // Find the value of the controlling field. 17 18 var fieldValue = document.getElementsByName(fieldName)[0].value; 19 20 // Send the controlling field value. 21 22 var requestBody = (fieldName + "=" + fieldValue); 23 24 // Process each target field name. 25 26 var targetFieldNameArray = targetFieldNames.split(","); 27 28 // Add the values of the dependent fields. 29 30 for (var i = 0; i < targetFieldNameArray.length; i++) { 31 var targetFieldName = targetFieldNameArray[i]; 32 33 // Find the values of the target field. 34 35 var targetFieldValue; 36 var targetFieldNodes = document.getElementsByName(targetFieldName); 37 for (var v = 0; v < targetFieldNodes.length; v++) { 38 targetFieldValue = targetFieldNodes[v].value; 39 requestBody += ("\r\n" + targetFieldName + "=" + targetFieldValue); 40 } 41 42 // NOTE: Konqueror hack: disable fields. 43 44 disableFields(targetFieldName); 45 } 46 47 // Add the element path specification. 48 49 requestBody += ("\r\nelement-path=" + elementPath); 50 51 // Load the remote document with the given parameters sent as text in the request body. 52 53 xmlhttp.send(requestBody); 54 55 // Parse the result document. 56 57 var newDocument = Sarissa.getDomDocument(); 58 newDocument = (new DOMParser()).parseFromString(xmlhttp.responseText, "text/xml"); 59 60 // Find the definition of the affected field in the result document. 61 62 var newElement = newDocument.getElementById(targetName); 63 var targetElement = document.getElementById(targetName); 64 65 // Insert the new definition into the current document. 66 67 if (newElement != null && targetElement != null) { 68 var importedElement = document.importNode(newElement, true); 69 targetElement.parentNode.replaceChild(importedElement, targetElement); 70 //importedElement.setAttribute("style", "background-color:red;"); 71 } 72 73 // NOTE: Test Konqueror bug. 74 75 //showMismatch(targetFieldNameArray); 76 } 77 78 function disableFields(targetFieldName) { 79 80 for (var i = 0; i < document.forms.length; i++) { 81 var form = document.forms[i]; 82 for (var j = 0; j < form.elements.length; j++) { 83 if (form.elements[j].name == targetFieldName) { 84 form.elements[j].name = ""; 85 } 86 } 87 } 88 } 89 90 function showMismatch(targetFieldNameArray) { 91 92 // Show how the number of field elements with a given name can be different 93 // from the number known to the DOM Level 0 part of the API. 94 95 for (var h = 0; h < targetFieldNameArray.length; h++) { 96 var targetFieldName = targetFieldNameArray[h]; 97 var targetFieldNodes = document.getElementsByName(targetFieldName); 98 alert("Nodes for " + targetFieldName + ": " + targetFieldNodes.length); 99 100 var count = 0; 101 for (var i = 0; i < document.forms.length; i++) { 102 var form = document.forms[i]; 103 for (var j = 0; j < form.elements.length; j++) { 104 if (form.elements[j].name == targetFieldName) { 105 count++; 106 } 107 } 108 } 109 alert("Fields for " + targetFieldName + ": " + count); 110 } 111 }