Avatar billede topceres Nybegynder
06. december 2007 - 15:01 Der er 14 kommentarer og
1 løsning

Call to undefined function / object expected

Jeg går lige til sagen ... følgende er en del af en php side, men det er ikke PHP delen, der driller, det er javascript delen ... i foreach loopet defineres nær enden en DIV tag indeholdende en form. Ved onClick på et billede der, kaldes en funktion som kommer lige nedenunder, og som får navnet acc_check_$i, hvor $i blot er et løbenummer. Men et klik på denne udløser en error, IE melder object expected, en debugning via firefox melder, at "acc_check_$i is not defined" ... selvom en visning af kilden klart viser, at funktionen er defineret på siden. Jeg har forsøgt at bytte om på rækkefølger, flytte form elementerne osv osv, men det giver hele tiden samme fejl...

Nedenstående er hvad det drejer sig om....

------------------------------------------------------------


$html .=  '
<table width="100%" border="0" cellspacing="0"><tbody>
<tr>
<td class="smalltext"><strong>'.$headline.'</strong></td>
</tr>';

$i=1;
foreach ($tilbehor as $varenummer){
$i++;
$vare = new vare();
$vare->load($varenummer);

if ( gettype($i/2) == "integer" ) {
$class = 'bgrow1';
} else {
$class = 'bgrow2';
}

$lager = $vare->getImageStatus();

$html .= '                         
<tr width="100%" class="'.$class.'">

<td class="smalltext">
'.$varenummer.'
</td> 
<td class="smalltext">
<a href="vare-oversigt.php?varenummer='.$varenummer.'">'.stripslashes($vare->getName()).'</a>
</td>
<td class="smalltext">
<img alt="Lagerstatus" title="Lagerstatus" class="lagerStatus" src="imgNewDesign/'.$lager.'">
</td>
<td>
'.getDisplayPrice($varenummer, 1,true).'
</td>

<td>
<nobr>
<div id="addToBasketContainer_'.$varenummer.'">
<form style="margin-bottom: 0px;" onSubmit="acc_check_'.$i.'();return false;" name="acc_form_'.$i.'">
<input type="hidden" name="varenummer" value="'.$varenummer.'">
<input type="hidden" name="checkvalue" value="'.$i.'">
<input type="text" name="antal" value="1" size="1" maxlength="3">
<img src="img/cart.gif" onClick="acc_check_'.$i.'();return false;">
</form>
</div>
</nobr>
</td>
<td width="2">
<script language="Javascript">
function acc_check_'.$i.'() {
var antal = document.gruppeTabOption.addToBasketContainer_'.$varenummer.'.acc_form_'.$i.'.antal.value;
if (antal >= 1 ) {
if (document.getElementById(\'frontBoxNoKurv\').className==\'frontBoxContentCellDivHide\' || document.getElementById(\'frontBoxNoKurv\').className==\'hide\'){
maxMinFrontBox(\'product\', \'Kurv\')
}    updateContainer(\'basketContent\',\'ajax/generateBasket.php?varenummer=\'+document.form_'.$i.'.varenummer.value+\'&tilfoej=\'+document.form_'.$i.'.antal.value+\'&checkvalue=\'+'.$i.'+\'&type=varegruppe\');
return true;
}
else {
alert(\'Der skal bestilles mindst 1 stk\');
}
}
</script>
</td>   

</tr>';
}
//</form>
$html .= '
</tbody></table>';

------------------------------------------------------------
og her kommer den kode, der kommer ud af det (sourcekode via firebug):
------------------------------------------------------------

<table width="100%" cellspacing="0" border="0">
<tbody>
<tr>
<td class="smalltext">
<strong>Tilbehør:</strong>
</td>
</tr>
<tr class="bgrow1" width="100%">
<td class="smalltext"> 55274 </td>
<td class="smalltext">
<a href="vare-oversigt.php?varenummer=55274">Brother Tromle DR-2000 HL-2000 ser + MFC 7xxx</a>
</td>
<td class="smalltext">
<img class="lagerStatus" src="imgNewDesign/yes.gif" title="Lagerstatus" alt="Lagerstatus"/>
</td>
<td> Kr. 569,- </td>
<td>
<nobr>
<div id="addToBasketContainer_55274">
<form name="acc_form_2" onsubmit="acc_check_2();return false;" style="margin-bottom: 0px;">
<input type="hidden" value="55274" name="varenummer"/>
<input type="hidden" value="2" name="checkvalue"/>
<input type="text" maxlength="3" size="1" value="1" name="antal"/>
<img onclick="acc_check_2();return false;" src="img/cart.gif"/>
</form>
</div>
</nobr>
</td>
<td width="2">
<script language="Javascript">
1
2 function acc_check_2() {
3 var antal = document.gruppeTabOption.addToBasketContainer_55274.acc_form_2.antal.value;
4 if (antal >= 1 ) {
5 if (document.getElementById('frontBoxNoKurv').className=='frontBoxContentCellDivHide' || document.getElementById('frontBoxNoKurv').className=='hide'){
6 maxMinFrontBox('product', 'Kurv')
7 } updateContainer('basketContent','ajax/generateBasket.php?varenummer='+document.form_2.varenummer.value+'&tilfoej='+document.form_2.antal.value+'&checkvalue='+2+'&type=varegruppe');
8 return true;
9 }
10 else {
11 alert('Der skal bestilles mindst 1 stk');
12 }
13 }
14
</script>
</td>
</tr>
<tr class="bgrow2" width="100%">
<td class="smalltext"> 55622 </td>
<td class="smalltext">
<a href="vare-oversigt.php?varenummer=55622">Brother Toner TN-2000</a>
</td>
<td class="smalltext">
<img class="lagerStatus" src="imgNewDesign/yes.gif" title="Lagerstatus" alt="Lagerstatus"/>
</td>
<td> Kr. 434,- </td>
<td>
<nobr>
<div id="addToBasketContainer_55622">
<form name="acc_form_3" onsubmit="acc_check_3();return false;" style="margin-bottom: 0px;">
<input type="hidden" value="55622" name="varenummer"/>
<input type="hidden" value="3" name="checkvalue"/>
<input type="text" maxlength="3" size="1" value="1" name="antal"/>
<img onclick="acc_check_3();return false;" src="img/cart.gif"/>
</form>
</div>
</nobr>
</td>
<td width="2">
<script language="Javascript">
1
2 function acc_check_3() {
3 var antal = document.gruppeTabOption.addToBasketContainer_55622.acc_form_3.antal.value;
4 if (antal >= 1 ) {
5 if (document.getElementById('frontBoxNoKurv').className=='frontBoxContentCellDivHide' || document.getElementById('frontBoxNoKurv').className=='hide'){
6 maxMinFrontBox('product', 'Kurv')
7 } updateContainer('basketContent','ajax/generateBasket.php?varenummer='+document.form_3.varenummer.value+'&tilfoej='+document.form_3.antal.value+'&checkvalue='+3+'&type=varegruppe');
8 return true;
9 }
10 else {
11 alert('Der skal bestilles mindst 1 stk');
12 }
13 }
14
</script>
</td>
</tr>
</tbody>
</table>
------------------------------------------------------------
hjælp vil være meget værdsat...

/Brian
Avatar billede topceres Nybegynder
06. december 2007 - 15:01 #1
(se bort fra tallene ud for linierne ved funktionerne i sourcen ... disse er blot illustrative fra firebug's side)
Avatar billede cpufan Juniormester
06. december 2007 - 15:55 #2
smid javascript funktionen ind mellem <head> og </head>

så bliver den indlæst før det andet
Avatar billede topceres Nybegynder
06. december 2007 - 16:27 #3
jo, men problemet er at javascript funktionen bliver dannet i loopet, således at der bliver en funktion pr. emne i loopet ... og i det hele taget bliver dannet på en anden side end head bliver skrevet... så skal jeg ændre det til en funktion med nogle parametre - er der ingen anden udvej? Jeg kan bare ikke se, hvorfor dette ikke skulle virke...

/Brian
Avatar billede cpufan Juniormester
06. december 2007 - 17:02 #4
så skal du sikre at funktionen er dannet før den kaldes
Avatar billede topceres Nybegynder
06. december 2007 - 17:51 #5
Hej cpufan, ok - men så bliver jeg nødt til at sende nogle parametre med til js funktionen istedet ... kan du så instruere mig i, hvad der er galt med dette..:

---------------------------------------------------------------------
<div id="addToBasketContainer_'.$varenummer.'">
<form style="margin-bottom: 0px;" onSubmit="acc_check_'.$i.'();return false;" name="acc_form_'.$i.'" id="acc_form_'.$i.'">
<input type="hidden" name="varenummer" value="'.$varenummer.'">
<input type="hidden" name="checkvalue" value="'.$i.'">
<input type="text" name="antal" id="antal" value="1" size="1" maxlength="3" onclick="this.value=(parseInt(this.value)+1);this.focus();">
<img src="img/cart.gif" onClick="acc_check('.$varenummer.', '.$i.',document.getElementFromId( document.gruppeTab.gruppeTabOption.addToBasketContainer_'.$varenummer.'.acc_form_'.$i.'.antal ).value);return false;">
</form>
</div>
---------------------------------------------------------------

...problemet er i den 3. paramter jeg prøver at sende til funktionen - hvilket er et forsøg på at få indtastningen fra input feltet ovenfor med som parameter. Men det duer ikke rigtig, sikkert fordi jeg får ID'en galt i halsen? Kilden er søm følger, fra og med det bliver "interessant".

------------------------------------------------------------------

<table width="1000" cellspacing="4" cellpadding="4" border="0">
<tbody>
<tr>
<td width="800" valign="top">
<div class="varesideTopLeftContainer">
</div>
<div class="varesideTopRightContainer">
</div>
<div style="clear: both;">
</div>
<div style="padding-top: 10px;">
<table width="100%" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<td valign="top">
<div id="gruppeTab">
<h1 class="gruppeTabHeader">Vareoversigt</h1>
<div id="tabMenuContainer">
</div>
<div id="gruppeTabOption">
<table width="100%" cellspacing="0" border="0">
<tbody>
<tr>
<td valign="top">
<table width="100%" cellspacing="0" border="0">
<tbody>
<tr>
</tr>
<tr class="bgrow1" width="100%">
</tr>
<tr class="bgrow2" width="100%">
<td class="smalltext"> 55622 </td>
<td class="smalltext">
</td>
<td class="smalltext">
</td>
<td> Kr. 434,- </td>
<td>
<nobr>
<div id="addToBasketContainer_55622">
<form id="acc_form_3" name="acc_form_3" onsubmit="acc_check_3();return false;" style="margin-bottom: 0px;">
<input type="hidden" value="55622" name="varenummer"/>
<input type="hidden" value="3" name="checkvalue"/>
<input id="antal" type="text" onclick="this.value=(parseInt(this.value)+1);this.focus();" maxlength="3" size="1" value="1" name="antal"/>
<img onclick="acc_check(55622, 3,document.getElementFromId( document.gruppeTab.gruppeTabOption.addToBasketContainer_55622.acc_form_3.antal ).value);return false;" src="img/cart.gif"/>
</form>
</div>
</nobr>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<br/>
<p/>
</td>
<td width="200" valign="top">
</td>
</tr>
</tbody>
</table>
<br clear="all"/>
</td>
</tr>
<tr>
</tr>
</tbody>
</table>
Avatar billede cpufan Juniormester
06. december 2007 - 18:02 #6
document.getElementFromId

skal hedde

document.getElementById

melder den ikke fejl på det?
Avatar billede cpufan Juniormester
06. december 2007 - 18:03 #7
<img onclick="acc_check(55622, 3,document.getElementFromId( document.gruppeTab.gruppeTabOption.addToBasketContainer_55622.acc_form_3.antal ).value);return false;"


til


<img onclick="acc_check(55622, 3,document.getElementById( document.gruppeTab.gruppeTabOption.addToBasketContainer_55622.acc_form_3.antal ).value);return false;"
Avatar billede topceres Nybegynder
06. december 2007 - 18:31 #8
Giver desværre samme fejl: "document.gruppeTab has no properties" (Firefox) eller "document.gruppeTab.gruppeTapOption is null or noran object" (IE) ... :-(
Avatar billede cpufan Juniormester
06. december 2007 - 20:13 #9
den skal vel også hedde:

<img onclick="acc_check(55622, 3,document.getElementFromId( document.gruppeTabOption.addToBasketContainer_55622.acc_form_3.antal ).value);return false;" src="img/cart.gif"/>

istedetfor

<img onclick="acc_check(55622, 3,document.getElementFromId( document.gruppeTab.gruppeTabOption.addToBasketContainer_55622.acc_form_3.antal ).value);return false;" src="img/cart.gif"/>

eller hvad?
Avatar billede topceres Nybegynder
07. december 2007 - 06:31 #10
Tak for svaret men desværre nej, så siger de bare: "document.gruppeTabOption has no properties" (Firefox) eller "document.gruppeTapOption.addToBasketContainer_55622 is null or not an object" (IE) ... :-(
Avatar billede topceres Nybegynder
07. december 2007 - 07:57 #11
... kan det være fordi
---document.gruppeTab.gruppeTabOption.addToBasketContainer_'.$varenummer.'.acc_form_'.$i.'.antal 
---
skal være i anførselstegn inde i parantesen? Så er problemet jo, at hele onClick funktionen er i dobb. anførselstegn, og hele skidtet er i enkelte anførselstegn grundet at det er indholdet af en php variabel... så der er ikke flere anførselstegn at bruge af..?
Avatar billede topceres Nybegynder
07. december 2007 - 08:07 #12
jeg mener, normalt gøres det jo sådan: getElementById("var") - med den ene eller den anden form for anførselstegn ... hvad søren kan jeg gøre her istedet for?
Avatar billede topceres Nybegynder
07. december 2007 - 09:11 #13
har prøvet at lave anførselstegn med backslash foran \' .... tror måske det er vejen at gå, men den siger stadig at elementet ikke har nogen properties ... jeg har nok fået rækken af ID'er galt i halsen...
Avatar billede topceres Nybegynder
07. december 2007 - 09:24 #14
fandt ud af det ... kombination af ovenstående nødvendighed at slash, og så skulle ID'en kun være "antal", ikke alt det pjat foran. Du skal have tak for din tid og vejledning, though. Svar, så sender jeg point.
Avatar billede cpufan Juniormester
07. december 2007 - 11:30 #15
du er jo vildt sej  :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester