<head> <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2"> <meta name="robots" content="noindex, nofollow" /> <title></title> <script type="text/javascript" src="../jq/ajax.js"></script> <?php echo " <script type=\"text/javascript\"> var ajax = new sack(); var podkatid = '".$_POST[podkatname]."'; function getpodkatlist(sel) { if (typeof(sel)== 'string' ) { var katid = sel; } else { var katid = sel.options[sel.selectedIndex].value; } document.getElementById('podkatname').options.length = 0 ; select box if(katid.length>0){ ajax.requestFile = 'getpodkat.php?podd=".$_POST[podkatname]."&katid='+katid; ajax.onCompletion = createpodkat; ajax.runAJAX(); } } function createpodkat() { var obj = document.getElementById('podkatname'); eval(ajax.response); } echo " function getpodkatlist2(sel) { if (typeof(sel)== 'string' ) { var katid = sel; } else { var katid = sel.options[sel.selectedIndex].value; } document.getElementById('podkatname').options.length = 0 ; select box if(katid.length>0){ ajax.requestFile = 'getpodkat.php?podd=".$_POST[podkatname]."&katid='+katid; ajax.onCompletion = createpodkat; ajax.runAJAX(); } } function createpodkat() { var obj = document.getElementById('podkatname'); } </script> "; ?> </head>
w Body wywołuję tak:
<body onload="getpodkatlist1(40)" ; onload="getpodkatlist2(23)">
wywołuje mi się tylko jedna z nich ale dwóch na raz nie mogę wywołać .
Dorwałem wtedy w necie kolejną funkcję do wywoływania dwóch funkcji javascript .
function onLoadHandler(init_fxn)
{
var old_init = window.onload;
var new_init = init_fxn;
window.onload = function(){
if (typeof(old_init)=="function")
{
old_init;
}
new_init;
}
return this;
}
</script>
i próbowałem to wywołać tak:
<script type="text/javascript">
new onLoadHandler(getpodkatlist('21'));
new onLoadHandler(getpodkatlist2('40'));
</script>
Gdy wywołuję powyższym handlerkiem funkcję getpodkatlist('21') lub getpodkatlist2('21') to żadna z nich nie działa. Jak wywoływałem je w Body przez onload to chociaż jedna zawsze się ładowała.
Gdy wywołuję handlerkiem testową funkcję np. jedną funkcją wołanie alertu, a drugą funkcją np. documet.write() to wszystko działa pięknie.
No i teraz sądzę, że problem jest gdzieś w ajax. Tylko nie za bardzo mam pomysł jak wywołać ajax 2 razy albo żeby odpytał plik .php ,a ajax.requestFile odebrał wynik i go zwrócił po czym żeby zrobił to samo na rzecz kolejnego obiektu tą samą metodą.
ajax.requestFile - może tu jest gdzieś problem?
na pytanie do czego jest ta funkcja odpowiadam - a no do wywoływania kategorii, a potem podkategorii z opcją zapamiętywania wyboru po wysłaniu formularza .Chcę żeby funkcja onload zwrócila mi zapamiętany wynik w opcji wyboru
<?php ?> działa na rzecz tego skryptu. <form action="zapajax.php" method="post"> <table> <tr> <td>Kategorie </td> <td><select id="katname" name="katname" onchange="getpodkatlist(this)" > <option value="0" >Wybierz kategorię</option> <?php if($_POST[katname] == $tabkat[id]){ $zaz = 'selected="selected"'; } else { $zaz = ''; } echo ' <option value="'.$tabkat[id].'" '.$zaz.'>'.$tabkat[nazwa].'</option> '; } ?> </select> </td> </tr> <tr> <td>Podkategorie: </td> <td><select id="podkatname" name="podkatname"> <option value="0" >Wybierz najpierw kategorię</option> </select> </td> </tr> <tr> <td></td> <td> <input type="submit" name"zapisz" value="wyślij" > </td> </tr> </table> </form>
Ajax wywołuję ten plik getpodkat.php
<?php include("../include/config.php"); include("../include/conector.php"); $podkat = mysql_query("select * from ".$prefix."podkategorie where id_kat= '".mysql_real_escape_string($_GET['katid'])."'"); if ($_GET['katid'] == 0 ) { $op_podkat = iconv('ISO-8859-2', 'UTF-8', 'Wybierz podkategorię'); ";} { if ($tabpodkat[id] == $_GET['podd'] ) { $selected = 'seleted=\"selected\"'; } $tabpodkat[nazwa] = iconv('ISO-8859-2', 'UTF-8', $tabpodkat[nazwa]); echo "obj.options[obj.options.length] = new Option('".$tabpodkat[nazwa]."','".$tabpodkat[id]."' , '".$selected."'); "; $selected = ''; } } ?>
Na pytanie po co wywołuje tą funkcję dwa razy - odpowiadam bo chcę dać do wyboru użytkownikom dopisania się do kilku kategorii w katalogu.