Javascript functie starten vanuit Php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Luc V

Luc V

25/02/2017 17:41:31
Quote Anchor link
Met onderstaande code wordt een functie myFunction aangeroepen die een veld en een button toont of verbergt afhankelijk van de inhoud in een ander veld. Zodra de waarde van dit veld gewijzigd wordt, wordt de functie myFunction aangeroepen en op basis van de waarde die zich bevindt in het gewijzigde veld wordt een ander veld en een button getoond of niet. Tot zover lukt dit allemaal.

Momenteel wordt het veld en button dat al dan niet verbergt gaat worden bij het laden van de pagina automatisch getoond. Ook hier zou ik bij het laden het veld en button willen verbergen afhankelijk van de waarde die bij het laden reeds getoond wordt in het selectie veld.

Hiervoor heb ik een functie verberg gemaakt, maar krijg het niet voor elkaar om deze aan te roepen.
De vraagstelling om deze functie aan te roepen op basis van de waarde Gekleurd die al dan niet voorkomt is ook reeds gemaakt.

Kan iemand mij hiervoor informeren hoe ik dit verder dien aan te pakken.
Alvast bedankt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
defined('_JEXEC') or die();
$product = $viewData[0];

$params = $viewData[1];
$options = explode(',', $params->custom_qvariant);
$class='';
$selects= array();

$form = JRequest::getVar("jform", "", "post");
$product_id = JRequest::getInt ('virtuemart_product_id', 0);

$db = JFactory::getDbo();
$db->setQuery("Select * From #__virtuemart_products_nl_nl Where virtuemart_product_id = $product_id");
$rows = $db->loadObjectList();

foreach( $rows As $row ){
  
  $product_naam = $row->product_name."\n";
}


echo '<input id="product_naam" value="'.$product_id.'-'.$product_naam.'"></input>';

if (!class_exists('CurrencyDisplay')) require(VMPATH_ADMIN . DS . 'helpers' . DS . 'currencydisplay.php');
$currency = CurrencyDisplay::getInstance();

foreach ($options as $valuesWithPrice) {
    $valueWithPrice = explode('@', $valuesWithPrice);

    if ( isset ($valueWithPrice[1]) ) {
         $text = $valueWithPrice[0].' - [ '.$valueWithPrice[1].' € ]';
    }


        $text = str_replace(',', '@@@', $text); //temp replace the commas

    $selects[] = array('value' =>$valueWithPrice[0], 'text' => $text );
}


$verpakking_id = 'customProductData['.$product->virtuemart_product_id.']['.$params->virtuemart_custom_id.']['.$params->virtuemart_customfield_id .'][custom_qvariant]';
$verpakking_par = '"'.$verpakking_id.'"';

$html = JHTML::_('select.genericlist', $selects, $verpakking_id,'class=customqvariant onchange=myFunction('.$verpakking_par.')','value','text',$selects[0],false,true);
$html =   str_replace('@@@', ',', $html); //reinsert the commas

echo $html;

echo '<button id="kleuren" style="border: 1px solid #ccc; border-radius: 5px; background-color: #fff; width: 220px;" onclick="ToonKleurenWaaier('.$product_id.');return false;"><img src="/images/Algemeen/ncs.png" /></button>';

$keuze = substr($selects[0]['value'], 0, 8);

if ($keuze=="Gekleurd") {
  // in dit geval mag het kleurveld en de button getoond worden
  
} else {
  // indien de keuze niet begint met Gekleurd dan dient de functie myFunction aangeroepen te worden.  
  // zodat het veld kleur_veld en button_kleur status hidden moet worden, idem zoals gebeurt in de functie myFunction
  // die aangeroepen wordt als de keuze gewijzigd wordt in onchange

  // Hier dient de code aangevuld te worden om de functie aan te roepen


}

?>


<script>

function myFunction(parameter) {

var a = parameter;
var b = 'customProductData'+a.replace(/\D/g,'')+'custom_qvariant';
var p1 = a.indexOf("[");
var p2 = a.indexOf("]");
var c = a.substring(p1+1, p2);

var verpakking = document.getElementById(b).value;
var gekleurd = verpakking.substring(0,8);
var kleur_veld = document.getElementById(c);
var kleur_titel = document.getElementsByClassName ("product-fields-title-wrapper");
var button_kleur = document.getElementById ("kleuren");

if (gekleurd == "Gekleurd") {

kleur_veld.style.visibility = "visible";
button_kleur.style.visibility = "visible";

} else {

kleur_veld.style.visibility = "hidden";
button_kleur.style.visibility = "hidden";

}

}

function ToonKleurenWaaier(par_id) {

var veld_id = par_id;
var y = (screen.height/2)-(700/2);
var x = (screen.width/2)-(950/2);
myWindow = window.open ('/Kleurenkiezer.html', 'myWindow', 'left=' + x + ', top=' + y + ', height=700, width=950, toolbar=no, menubar=no, ');

}

function verberg(parameter) {

var a = parameter;
var p1 = a.indexOf("[");
var p2 = a.indexOf("]");
var c = a.substring(p1+1, p2);

var kleur_veld = document.getElementById(c);
var button_kleur = document.getElementById ("kleuren");

kleur_veld.style.visibility = "hidden";
button_kleur.style.visibility = "hidden";

}

</script>
Gewijzigd op 25/02/2017 17:45:43 door Luc V
 
PHP hulp

PHP hulp

22/11/2024 08:45:11
 
Ivo P

Ivo P

25/02/2017 19:45:11
Quote Anchor link
En als je onderaan vlak voor </script> zet:


myFunction(
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?= $verpakking_par?>
);
 
Luc V

Luc V

25/02/2017 19:53:28
Quote Anchor link
Neen dat veranderd niets.

Ik ben wel even verder aan het zoeken gegaan met de info die je me hiervoor gaf.
Als ik één en ander test zou volgens mij dit moeten werken

window.onload=verberg(
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?= $verpakking_par?>
);

door net voor </script> te plaatsen.

Ik heb in elk geval gemerkt dat hierdoor het script gestart wordt en de parameter wordt meegegeven, maar toch lukt het niet om het veld en de button te verbergen als de pagina geladen wordt en de waarde in het selectieveld niet begint met 'Gekleurd'

Toevoeging op 25/02/2017 20:35:03:

Ik heb nog even verder wat getest en merk volgende probleem.

Als ik de functie myFunction aanroep krijg ik voor de variabele kleur_veld de waarde [object HTMLInputElement] en als ik de functie verberg aanroep krijg ik de waarde null voor de variabele kleur_veld.

Dit is alleszins volgens mij de reden waarom het niet lukt. Nu alleen nog even zoeken waarom de waarde van de variabele kleur_veld verschillend is bij het uitvoeren van de 2 functies, als deze toch vertrekken vanuit dezelfde parameters. Ik heb de indruk dat het window.onload wordt uitgevoerd voor dat het veld kleur_veld geplaatst is. Bij uitvoering van het script zie ik dit ook. Dus het window.onload wordt net iets te snel uitgevoerd. Ik vermoed dat dit de oorzaak is, maar weet momenteel nog niet hoe dit opgelost kan worden. Iemand een idee ?
Gewijzigd op 25/02/2017 20:18:33 door Luc V
 
Ozzie PHP

Ozzie PHP

25/02/2017 21:11:53
Quote Anchor link
Ik heb de discussie niet gevolgd ... maar ik ga even af op je laatste opmerking.

Zet het script eens helemaal achteraan in je HTML-document, net voor </html>.

Dit doe je op de volgende manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<script>verberg(<?php echo $verpakking_par; ?>);</script>
 
Luc V

Luc V

25/02/2017 21:28:52
Quote Anchor link
Lukt ook niet Ozzie, maar ik heb het net opgelost gekregen. Misschien niet de juiste manier maar het is me wel gelukt.

In de vraagstelling of de tekst in het selectieveld begint met Gekleurd of niet heb ik ingeval van niet een Iframe toegevoegd. Eigenlijk iets dat niet nodig is, maar ik vond een voorbeeldje op internet waarmee dit wel werkte. Het Iframe heb ik enkel nodig om een functie te kunnen uitvoeren zodra het Iframe geladen is. Daarvoor heb ik in het script een nieuwe regel toegevoegd die de functie verberg uitvoert, zodra het Iframe geladen is. De wijze om de variabele mee te geven zoals Ivo aangaf heb ik ook kunnen gebruiken.

if ($keuze=="Gekleurd") {
// in dit geval mag het kleurveld en de button getoond worden

} else {

echo '<iframe id="myFrame" src="/images/Algemeen/ncs.png" height="0"></iframe>';

}

?>

<script>

document.getElementById("myFrame").onload = function() {verberg(
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?= $verpakking_par?>
)};
 
Ozzie PHP

Ozzie PHP

25/02/2017 21:33:25
Quote Anchor link
Het klinkt niet goed. Dit lijkt me geen solide oplossing eerlijk gezegd.

Maar wat is of was nu eigenlijk het probleem in 1e instantie? De oplossing die ik hierboven geef zou gewoon moeten werken (mits de rest klopt uiteraard).

Je moet zelf maar kijken wat je ermee doet, maar een iframe toevoegen lijkt me echt iets wat je niet wil. Ik denk toch echt dat er iets anders verkeerd gaat.
 
Luc V

Luc V

25/02/2017 21:48:13
Quote Anchor link
Ozzie, U hebt wellicht wel gelijk, maar mijn kennis van Php is vrij beperkt en ik ben ervan overtuigd dat mijn oplossing niet de juiste wijze is. Het php bestand waarin ik deze code heb aangepast is een onderdeel van een Joomla website. Het behoort namelijk tot een webshop onderdeel van Virtuemart.

Zoals U wellicht zal weten zijn dit allemaal aparte bestanden. Waar dien ik dan uw regel net voor </html> toe te voegen. Is dit dan in de index.php van Joomla ?
 
Ozzie PHP

Ozzie PHP

25/02/2017 21:56:46
Quote Anchor link
>> Zoals U wellicht zal weten zijn dit allemaal aparte bestanden. Waar dien ik dan uw regel net voor </html> toe te voegen. Is dit dan in de index.php van Joomla ?

Zeg maar 'je' hoor.

Ik ken Joomla niet zo heel goed. Ik zou zeggen probeer het gewoon eens :-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.