blob: 017af733d23369164738a16b8bd873d4937786a6 [file] [log] [blame]
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<page xmlns:ft="http://apache.org/cocoon/forms/1.0#template" xmlns:fi="http://apache.org/cocoon/forms/1.0#instance">
<script language="Javascript">
<![CDATA[
var xmlhttp;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@else
xmlhttp = false;
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = false;
}
function repopulateSelection(id, xmlhttp) {
var select = document.getElementById(id);
while (select.length > 0) {
select.remove(0);
}
var xml = xmlhttp.responseXML;
var newSelect = xml.documentElement;
var options = newSelect.getElementsByTagName("option");
for (var i = 0 ; i < options.length ; ++i) {
var option = document.createElement("option");
option.setAttribute("value", options.item(i).getAttribute("value"));
if (options.item(i).firstChild) {
var text = document.createTextNode(options.item(i).firstChild.nodeValue);
option.appendChild(text);
} else {
var text = document.createTextNode(option.getAttribute("value"));
option.appendChild(text);
}
select.appendChild(option);
}
}
function changeMake(make, model) {
xmlhttp.open("GET", "xhr_cars/" + make.value, true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
repopulateSelection("type", xmlhttp);
while (model.length > 0) {
model.remove(0);
}
}
}
xmlhttp.send(null)
}
function changeType(make, type) {
xmlhttp.open("GET", "xhr_cars/" + make.value + "/" + type.value, true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
repopulateSelection("model", xmlhttp);
}
}
xmlhttp.send(null)
}
]]>
</script>
<title>Car selector with XMLHTTPRequest</title>
<content>
<para>
This experimental sample demonstrates the use of XMLHttpRequest to update
fields without refreshing the page. It is currently broken: the form
cannot be successfully submitted, as the form model does not contain the
values of the type and model selection lists. After selecting a value in
the "model" field, the "type" and "model" fields are reset to their initial
values, instead of submitting the form. See also bugzilla 34077.
</para>
<ft:form-template action="xhr_carselector" method="POST">
<ft:continuation-id/>
<fi:group>
<fi:styling layout="columns"/>
<fi:items>
<ft:widget id="make">
<fi:styling submit-on-change="false" onchange="changeMake(this, document.getElementById('model')); return false;"/>
</ft:widget>
<ft:widget id="type">
<fi:styling submit-on-change="false" onchange="changeType(document.getElementById('make'), this); return false;"/>
</ft:widget>
<ft:widget id="model"/>
<ft:widget id="message"/>
<input type="submit" value="Buy it!"/>
</fi:items>
</fi:group>
</ft:form-template>
<p>
<a href="../">Back to samples</a>
</p>
</content>
</page>