ich schreibe gerade an einem Programm, mit dem man u.A. mithilfe von Javascript Suchanfragen erstellen und absenden kann. Diese werden dann an die Datenbank abgesetzt. Nun kann ich Die Anfragen beliebig veraendern, ich kann neue Suchelemente, wie z.B. Klammern, AND, OR und einzelne Spalten dynamisch hinzufuegen und wieder loeschen. Weiter kann ich, wenn ein Suchelement eingegeben ist, dieses auch vor oder zurueck verschieben. Darin liegt auch das Problem. wenn ich ein Suchelement verschiebe, so wird der Inhalt des input-Knotens in meinem DOM-Inspector auch verschoben, soweit so gut. Aber wenn ich dann die Suchanfrage abschicke, so werden die Input-Elemente nicht in der richtigen Reihenfolge abgesendet. Dies passiert z.b. dann, wenn ich zuerst ) , dann (, dann eine Spalte neu als Suchanfrage anlege. Dann schiebe ich diese richtig zurecht, also so: ( Spalte ) und schicke sie ab. Dann kann man die search-Argumente im Http-Header mal inspizieren und bemerkt, dass diese nicht in der richtigen Reihenfolge abgesendet wurden. Dies passiert aber nur im Mozilla-Firefox und Mozilla-Browser, in Opera ist dies nicht der Fall, IE habe ich keine Ahnung. Ich vermute also, dass es ein Fehler im JavaScript-Interpreter ist, weiss es aber nicht genau.
<html>
<title>PISO</title>
<body>
<a href="../../action/new.html?table=mama"><p>New entry</p></a>
<form action="/piso/view/standard/index.html" method="get" id="search_form">
<input type="hidden" name="table" value="mama">
Limit:<input type="text" name="limit" value="">
Offset:<input type="text" name="offset" value="0">
<br>
<select onchange="search_select_func(this.value)" id="search_select_form">
<option></option>
<option>(</option>
<option>)</option>
<option>and</option>
<option>or</option>
<option>sraka</option>
<option>kaka</option>
</select>
<script type="text/javascript">
var search_elems = new Array // associative array of array of search input elements
search_elems["sraka"] = function ()
{
var elems = new Array
var temp_text = document.createTextNode("sraka\n")
elems.push(temp_text)
elems.push(document.createElement("input"))
var temp_attr = document.createAttribute("type")
temp_attr.nodeValue = "hidden"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("name")
temp_attr.nodeValue = "search"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("value")
temp_attr.nodeValue = " mama.sraka "
elems[elems.length - 1].setAttributeNode(temp_attr)
elems.push(document.createElement("select"))
var temp_attr = document.createAttribute("name")
temp_attr.nodeValue = "search"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("size")
temp_attr.nodeValue = "1"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" = ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" < ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" > ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" <= ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" >= ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
elems.push(document.createElement("input"))
var temp_attr = document.createAttribute("type")
temp_attr.nodeValue = "text"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("name")
temp_attr.nodeValue = "search"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("value")
temp_attr.nodeValue = ""
elems[elems.length - 1].setAttributeNode(temp_attr)
return elems
}
search_elems["kaka"] = function ()
{
var elems = new Array
var temp_text = document.createTextNode("kaka\n")
elems.push(temp_text)
elems.push(document.createElement("input"))
var temp_attr = document.createAttribute("type")
temp_attr.nodeValue = "hidden"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("name")
temp_attr.nodeValue = "search"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("value")
temp_attr.nodeValue = " mama.kaka "
elems[elems.length - 1].setAttributeNode(temp_attr)
elems.push(document.createElement("select"))
var temp_attr = document.createAttribute("name")
temp_attr.nodeValue = "search"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("size")
temp_attr.nodeValue = "1"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" = ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" < ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" > ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" <= ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
var temp_option_elem = document.createElement("option")
var temp_option_text = document.createTextNode(" >= ")
temp_option_elem.appendChild(temp_option_text)
elems[elems.length - 1].appendChild(temp_option_elem)
elems.push(document.createElement("input"))
var temp_attr = document.createAttribute("type")
temp_attr.nodeValue = "text"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("name")
temp_attr.nodeValue = "search"
elems[elems.length - 1].setAttributeNode(temp_attr)
var temp_attr = document.createAttribute("value")
temp_attr.nodeValue = ""
elems[elems.length - 1].setAttributeNode(temp_attr)
return elems
}
var search_counter = 0
function search_select_func(search_ident)
{
search_counter++
var search_div = document.createElement("div")
var search_div_id = document.createAttribute("id")
search_div_id.nodeValue = "search_div_" + search_counter
search_div.setAttributeNode(search_div_id)
var down_button = document.createElement("img")
var down_button_src = document.createAttribute("src")
down_button_src.nodeValue = "http://localhost/piso/images/down_button.png"
down_button.setAttributeNode(down_button_src)
var down_button_click_handler = document.createAttribute("onclick")
down_button_click_handler.nodeValue = "search_div_down(\"search_div_" + search_counter + "\")"
down_button.setAttributeNode(down_button_click_handler)
search_div.appendChild(down_button)
var up_button = document.createElement("img")
var up_button_src = document.createAttribute("src")
up_button_src.nodeValue = "http://localhost/piso/images/up_button.png"
up_button.setAttributeNode(up_button_src)
var up_button_click_handler = document.createAttribute("onclick")
up_button_click_handler.nodeValue = "search_div_up(\"search_div_" + search_counter + "\")"
up_button.setAttributeNode(up_button_click_handler)
search_div.appendChild(up_button)
var close_button = document.createElement("img")
var close_button_src = document.createAttribute("src")
close_button_src.nodeValue = "http://localhost/piso/images/close_button.png"
close_button.setAttributeNode(close_button_src)
var close_button_click_handler = document.createAttribute("onclick")
close_button_click_handler.nodeValue = "search_div_close(\"search_div_" + search_counter + "\")"
close_button.setAttributeNode(close_button_click_handler)
search_div.appendChild(close_button)
if (search_ident == "(" || search_ident == ")" || search_ident == "and" || search_ident == "or") {
search_elem_insert(search_ident, search_div)
} else {
search_field_insert(search_ident, search_div)
}
document.getElementById("search_zone").appendChild(search_div)
document.getElementById("search_select_form").options[0].selected = true
}
function search_div_down(search_div_id)
{
var cloned_lower_search_elem = document.getElementById(search_div_id).nextSibling.cloneNode(true)
var lower_search_elem = document.getElementById(search_div_id).nextSibling
var cloned_search_elem = document.getElementById(search_div_id).cloneNode(true)
var search_elem = document.getElementById(search_div_id)
document.getElementById("search_zone").replaceChild(cloned_search_elem, lower_search_elem)
document.getElementById("search_zone").replaceChild(cloned_lower_search_elem, search_elem)
}
function search_div_up(search_div_id)
{
var cloned_upper_search_elem = document.getElementById(search_div_id).previousSibling.cloneNode(true)
var upper_search_elem = document.getElementById(search_div_id).previousSibling
var cloned_search_elem = document.getElementById(search_div_id).cloneNode(true)
var search_elem = document.getElementById(search_div_id)
document.getElementById("search_zone").replaceChild(cloned_search_elem, upper_search_elem)
document.getElementById("search_zone").replaceChild(cloned_upper_search_elem, search_elem)
}
function search_div_close(search_div_id)
{
document.getElementById("search_zone").removeChild(document.getElementById(search_div_id))
}
function search_field_insert (field_name, search_div)
{
field_search_elems = search_elems[field_name]()
for(var i = 0; i < field_search_elems.length; i++) {
search_div.appendChild(field_search_elems[i])
}
var br_space = document.createElement("br")
search_div.appendChild(br_space)
}
function search_elem_insert (search_token, search_div)
{
var search_text = document.createTextNode(" " + search_token + " ")
search_div.appendChild(search_text)
var input_elem = document.createElement("input")
var input_type = document.createAttribute("type")
input_type.nodeValue = "hidden"
input_elem.setAttributeNode(input_type)
var input_name = document.createAttribute("name")
input_name.nodeValue = "search"
input_elem.setAttributeNode(input_name)
var input_value = document.createAttribute("value")
input_value.nodeValue = " " + search_token + " "
input_elem.setAttributeNode(input_value)
search_div.appendChild(input_elem)
}
</script>
<div id="search_zone">
</div>
<input type="submit" value="Search">
</form>
</%def>
sraka
kaka
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=2">EDIT</a>
666
333
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=3">EDIT</a>
1
2
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=4">EDIT</a>
1
1
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=5">EDIT</a>
1
1
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=6">EDIT</a>
1
1
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=7">EDIT</a>
1
1
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=8">EDIT</a>
1
1
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=9">EDIT</a>
1
1
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=10">EDIT</a>
1
1
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=1">EDIT</a>
1
2
</div>
<div id="row">
<a href="../../action/edit_entry.html?table=mama&id=12">EDIT</a>
666
999
</div>
</body>
</html>