Ajouter un [ID] sur un bouton

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #113443

Bonjour,
Dans le formulaire d'adresse (vue : address/form.php)
il y a un bouton "OK" :)

voici le code :

echo $this->cart->displayButton(JText::_('OK'),'ok',$this->params,hikashop_completeLink('address&task=save'),'if(hikashopCheckChangeForm(\'address\',\'hikashop_address_form\')) document.forms[\'hikashop_address_form\'].submit(); return false;');
et on obtient
<input name="ok" class="btn button hikashop_cart_input_button" onclick="var field=document.getElementById('hikashop_product_quantity_field_1');if(hikashopCheckChangeForm('address','hikashop_address_form')) document.forms['hikashop_address_form'].submit(); return false;" type="submit" value="OK"/> 
J'aimerais bien ajouter à ce bouton un (id) nouvel attribut et une valeur (value) fixe (par exemple : toto) pour obtenir cela :

<input id="toto" name="ok" class="btn button hikashop_cart_input_button" onclick="var field=document.getElementById('hikashop_product_quantity_field_1');if(hikashopCheckChangeForm('address','hikashop_address_form')) document.forms.submit(); return false;" type="submit" value="OK"/>

Comment peux-je le faire ? :dry:

Merci :)

Last edit: 10 years 9 months ago by aspkiddy. Reason: erreur de frappe

Please Log in or Create an account to join the conversation.

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #113457

Bonjour,

J'ai trouvé une solution, mais je ne sais pas si cela est meilleur :

Rectification du fichier cart.php
administrator/ components/ com_hikashop/ helpers/ cart.php :

ajout dans la fonction displayButton:
$id=''

avant :

function displayButton($name,$map,&$params,$url='',$ajax="",$options="",$max_quantity=0,$min_quantity=1,$classname='',$inc=true){

function displayButton($name,$map,&$params,$url='',$ajax="",$options="",$max_quantity=0,$min_quantity=1,$classname='',$inc=true, $id=''){
et et dans $html :
avant :

$html= '<input type="submit" class="button hikashop_cart_input_button'.$classname.'" name="'.$map.'" value="'.$name.'" '.$ajax.$options.'/>';

$html= '<input id="button'.$id.'" type="submit" class="button hikashop_cart_input_button'.$classname.'" name="'.$map.'" value="'.$name.'" '.$ajax.$options.'/>';

Ensuite dans form.php (vue : address/form.php)
avant :

<input name="ok" class="button hikashop_cart_input_button" onclick="var field=document.getElementById('hikashop_product_quantity_field_1');if(hikashopCheckChangeForm('address','hikashop_address_form')) document.forms.submit(); return false;" type="submit" value="OK"/>

<input name="ok" class="button hikashop_cart_input_button" onclick="var field=document.getElementById('hikashop_product_quantity_field_1');if(hikashopCheckChangeForm('address','hikashop_address_form')) document.forms['hikashop_address_form'].submit(); return false;',null,null,null,null,null,'IdToto'); 

Est-ce qu'il y a une autre façon, meilleure que le mien? :blush:
Merci

Please Log in or Create an account to join the conversation.

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #113458

sans ,null,null,null,null,null, :blush: :dry: :ohmy:

Please Log in or Create an account to join the conversation.

  • Posts: 81540
  • Thank you received: 13071
  • MODERATOR
10 years 9 months ago #113472

C'est une solution oui.
Mais pourquoi vouloir y rajouter un id ? Il est surement possible de faire ce que vous voulez faire sans rajouter d'id.

The following user(s) said Thank You: aspkiddy

Please Log in or Create an account to join the conversation.

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #113604

J'ai besoin de cette id pour mon script que je vais utiliser, par exemple :

/* ... */
var buttonID = "post";
/* ... */

mais est-ce qu'il y a une autre solution meilleur que la mienne pour avoir cette id ? :unsure:

Merci

Please Log in or Create an account to join the conversation.

  • Posts: 81540
  • Thank you received: 13071
  • MODERATOR
10 years 9 months ago #113609

Par exemple, si vous avez jquery d'activé sur votre site, vous pouvez faire comme cela:

$('#hikashop_address_form_span_iframe').find('input[name="ok"]').id = 'post';

Cela récupèr le premier input avec le nom "ok" de l'élément avec l'id "hikashop_address_form_span_iframe" et ça lui attribut l'id "post".
api.jquery.com/attribute-equals-selector/

The following user(s) said Thank You: aspkiddy

Please Log in or Create an account to join the conversation.

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #113629

Meerci Nicolas,

J'ai jquery dans mon site que je t'utilise.

Je dois mettre ce code dans form.php ?

 echo '<script>$(\'#hikashop_address_form_span_iframe\').find(\'input[name="ok"]\').id = \'post\';</script>';
Cela ne marcherait pas!
Ou ailleurs ?

Please Log in or Create an account to join the conversation.

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #113633

Je l'ai finalement testé le code dans form.php

  $document = JFactory::getDocument();
	
  $document->addScript($this->baseurl.'jquery/js/jquery-1.4.2.min.js', 'text/javascript');
  $document->addScript($this->baseurl.'jquery/js/jquery-ui-1.8.6.custom.min.js', 'text/javascript');

  $document->addScript($this->baseurl.'jquery/jquery.noconflict.js', 'text/javascript');
  
  $document->addScript($this->baseurl.'aspkiddy.js', 'text/javascript');
  echo '<script>$(\'#hikashop_address_form_span_iframe\').find(\'input[name="ok"]\').id = \'post\';</script>';
mais je n'ai pas obtenu id=post dans le code de mon bouton :blush:

Please Log in or Create an account to join the conversation.

  • Posts: 13201
  • Thank you received: 2322
10 years 9 months ago #113870

En utilisant l'outil d'inspection de votre navigateur avez vous une erreur Javascript qui est retournée ?

The following user(s) said Thank You: aspkiddy

Please Log in or Create an account to join the conversation.

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #113961

Oui Xavier,

J'ai fait plusieurs tests

Avec le code :

echo '<script>$(\'#hikashop_address_form_span_iframe\').find(\'input[name="ok"]\').id = \'tpost\';</script>';
et ensuite avec le code :
echo '<script>$(\'#hikashop_address_form_span_iframe\').find(\'input[name="ok"]\').prop(\'id\', \'post\');</script>';
J'ai l'erreur suivante : :blush:

Dans FireFox

TypeError: $(...) is null

Dans Chrome :

Uncaught TypeError: Cannot call method 'find' of null
(anonymous function)

Dans IE

SCRIPT5007: Impossible d’obtenir la valeur de la propriété « find » : objet null ou non défini


J'ai fait le test dans un autre fichier HTML, tout va bien avec le code suivant : :whistle:
<HTML>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
</head>
<body>
<form action="" id="toto" name="toto">
  <div id="hikashop_address_form_span_iframe">
    <input name="ok" type="text" id="">
    <input name="toto" type="text" id="">
    <script>
		$('#hikashop_address_form_span_iframe').find('input[name="ok"]').prop('id', 'postoto');
</script> 
  </div>
</form>
</body>
</HTML>

et j'ai obtient dans navigateur sans erreur :

<input id="postoto" type="text" name="ok">
<input id="" type="text" name="toto">

Please Log in or Create an account to join the conversation.

  • Posts: 13201
  • Thank you received: 2322
10 years 9 months ago #114037

Il y a peut être un soucis avec les "quote" de votre code.

Êtes vous sûr que jQuery est bien chargé ? Vous pouvez le vérifier en regardant le code de la page, puis en cliquant sur le lien jQuery.

La div avec l'id "hikashop_address_form_span_iframe" est bien présente aussi sur la page ?

Please Log in or Create an account to join the conversation.

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #114184

Oui jQuery est bien chargé et fonction bien en plus j'ai ajouté

$document->addScript($this->baseurl.'/jquery.noconflict.js', 'text/javascript');
qui contient :
jQuery.noConflict();
var $j = jQuery.noConflict();
Oui La div avec l'id "hikashop_address_form_span_iframe" est bien présente juste avant form :
<div id="hikashop_address_form_span_iframe">
<form enctype="multipart/form-data" name="hikashop_address_form" method="post" action="/idees-cadeaux/address/save">

Lorsque je désactive la ligne suivante, je n'ai pas l'erreur
echo '<script>$(\'#hikashop_address_form_span_iframe\').find(\'input[name="ok"]\').prop(\'id\', \'post\');</script>';
	  ?>
  </form>
ou
echo '<script>$(\'#hikashop_address_form_span_iframe\').find(\'input[name="ok"]\').id = \'tpost\';</script>';
	  ?>
  </form>

Please Log in or Create an account to join the conversation.

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #114193

Puisque vous avez dit

Xavier wrote: Il y a peut être un soucis avec les "quote" de votre code.

alors j'ai essayé avec le code suivant, mais c'est la même erreur
echo "<script>$('#hikashop_address_form_span_iframe').find('input[name=\"ok\"]').prop('id', 'post');</script>";
ou
echo "<script>$('#hikashop_address_form_span_iframe').find('input[name=\"ok\"]').id = 'tpost';</script>";

Please Log in or Create an account to join the conversation.

  • Posts: 81540
  • Thank you received: 13071
  • MODERATOR
10 years 9 months ago #114196

L'erreur Uncaught TypeError: Cannot call method 'find' of null indique que jQuery n'a pas trouvé d'élément HTML avec l'id hikashop_address_form_span_iframe dans la page.

Il est possible que ce soit car le dom n'est pas encore chargé.
Vous pouvez faire cela pour lancer le JS uniquement une fois le dom chargé:
$(document).ready(function () {
// Function code here.
});

Sinon, si ca ne fonctionne toujours pas, c'est qu'il n'y a pas d'élément avec cet id sur votre page.

Please Log in or Create an account to join the conversation.

  • Posts: 98
  • Thank you received: 1
10 years 9 months ago #114197

Ça y est... :)

ça marche (donc id=toto ) sans erreur : :cheer:

voici 2 solutions : :lol:

echo '<script>jQuery(function() {jQuery(\'#hikashop_address_form_span_iframe\').find(\'input[name="ok"]\').prop(\'id\', \'toto\')} );</script>';
ou bien
echo '<script>jQuery(document).ready(function() {jQuery(\'#hikashop_address_form_span_iframe\').find(\'input[name="ok"]\').prop(\'id\', \'toto\')} );</script>';


:silly:
Avec l'outil d'inspection de navigateur on obtient :
<input id="toto" class="btn button hikashop_cart_input_button" type="submit" onclick="var field=document.getElementById('hikashop_product_quantity_field_1');if(hikashopCheckChangeForm('address','hikashop_address_form')) document.forms['hikashop_address_form'].submit(); return false;" value="OK" name="ok">

C'est parfait :laugh:

Last edit: 10 years 9 months ago by aspkiddy. Reason: erreur dans le code

Please Log in or Create an account to join the conversation.

Time to create page: 0.096 seconds
Powered by Kunena Forum