11550 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je n'arrive pas à positionner un objet (en "absolute") qui vient d'une requete ajax

$.ajax({
  type: "GET",
  url: "monFichier.php",
  data: "param=" + value,
  success: function(response){
   $('body').append(response);
  }
});

$('#monDiv').css({top: 500, left: 500});


réponse Ajax :

<div id=monDiv>Texte</div>


Coté CSS :

#monDiv {position: absolute;}


mon Div ce retrouve en bas de la page mais pas à 500 du haut et de la gauche. Je suis obligé de passer par un conteneur "artificiel" déja présent dans la page avant le lancement de la requette (le code ci-dessus est en conséquence un peu différent).
Modifié par ludohen (06 Jun 2010 - 06:21)
C'est bizarre je ne me l'explique pas mais même si je crée un contener dans mon code avant la requete de cette façon :

$('body').append('<div id="monDiv"></div>');


ça ne marche pas
Tu l'as inclus dans un
$(document).ready(function(){...});

Ton html est valide ?
Ta console ne renvoie pas d'erreurs ?
Salut Paolo,
alors histoire d'être plus précis (j'ai changé le titre du topic) et d'être aussi aussi beaucoup plus compliqué, je cherche à faire un menu contextuel (click droit sur certain éléments) dont le contenu est chargé via ajax (gestion du menu par PHP en fonction d'un context).

Pour répondre à tes questions précédentes :
- le code est valide
- $(document).ready(function(){...}); est bien là
- la console ne retourne pas d'erreur

J'ai indiqué dans les commentaires du plugin les choses qui pose problèmes.

le Plugin menu contextuel (jquery.ajaxContextMenu.js):

// jQuery Ajax Context Menu Plugin
//
// Script fortement inspirer jQuery Context Menu Plugin
// More info:  http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/
 

if(jQuery)( function() {
	$.extend($.fn, {
    
    ajaxContextMenu : function(o, callback){
    
      // Define context to be send as param to server
      // must correspond to a class for clickable items
      var contexts = [
        'file',
        'misc'
      ];
      var menuContenerId = 'cxtMenuContener';
      
      var menuContener = $('#' + menuContenerId);
      
      
      // Debug defaut context event
      // ************************************************
      // Ne marche pas si pas présent
      // ************************************************
      $(document).bind("contextmenu", function(e) {
        e.preventDefault();
      });
      
      $(this).mousedown(function(e){
        var evt = e;
        evt.stopPropagation();
        $(this).mouseup(function(e){
          e.stopPropagation();
          $(this).unbind('mouseup');
        
          if (e.button == 2) {
          
            // Init menu
            menuContener.children().remove();
            
            // Mouse position
            var x = e.pageX;
            var y = e.pageY;
            
            // Menu contener creation
            // ***************************************
            // Ne marche pas, donc ce bout de code est directement dans la page
            // ***************************************
            // $('body').append('<div id="' + menuContenerId +'"></div>');
            
            // Add absolute position & posotion to the contener
            menuContener.css({position: 'absolute', top: y, left: x});
            menuContener.hide();
            
            // Get context
            var j = contexts.length;
            for (var i=0; i<=j; i++){
              if ($(this).hasClass(contexts[i])) {
                var context = contexts[i];
                break;
              }
            }
            
            // Load myMenu via Ajax
            $.ajax({
              type: "GET",
              url: "contextMenu.php",
              data: "context=" + context,
              success: function(response){
                menuContener.append(response);
              }
            });
            
            var ajaxMenu = $('#menuTest');
            
            // Display menu
            menuContener.fadeTo(3000, 0.95);
            
            // Menu click handler
            // *********************************************
            //  Fonctionne sur IE 7 mais pas sur Moz 3.6.3
            // *********************************************
            $('#menuTest > ul > li > a').each(function(){
              $(this).click(function(e){
                e.preventDefault();
                if(callback) {
                  callback($(this).attr('href'));
                }
              });
            });

            
            //Hide menu
            setTimeout(function(){ // moz delay
              $(document).click(function(){
                $(document).unbind('click');
                menuContener.children().remove();
              });
            },0);
            
            // Debug
            $('#log').children().remove();
            $('#log').slideDown();
            $('#log').append('<div>right click on : ' + $(this).attr('id') + '</div>');
            $('#log').append('<div>context : ' + context + '</div>');
            $('#log').append('<div>var contener id : ' + menuContenerId + '</div>');
          }  
        });
      });
    }
    
  });
})(jQuery);


le script (myJS.js):

$(document).ready(function(){
  $('.rightClick').ajaxContextMenu(
    {},
    function(action){
      alert(action);
    }
  );
});


le code renvoyer par le serveur (contextMenu.php) :

<div id="menuTest">
  <div>context : <?php echo $context; ?></div>
  <ul>
    <li><a href="action/click1" id="1">click 1</a></li>
    <li><a href="action/click2" id="2">click 2</a></li>
  </ul>
</div>


mon fichier HTML :

<!DOCTYPE html>

<html lang="fr">
<head>
  <meta charset="UTF-8">

  <title>Ma page de test JavaScript et jQuery</title>

  <link rel="stylesheet" media="screen" href="css/style.css">
  <link rel="stylesheet" media="screen" href="css/contextMenu.css">

  <script src="js/jquery-1.4.2.js"></script>
  <script src="js/jquery.ajaxContextMenu.js"></script>
  <script src="js/my_js.js"></script>

  <meta name="description" content="Ma page de test JavaScript et jQuery">

  <!--[if IE]><![endif]-->
</head>
<body>
  <div id="fileList">
    <div id="file_1" class="file rightClick" name="Mon_fichier_1">Mon fichier 1</div>
    <div id="file_2" class="file rightClick" name="Mon_fichier_2">Mon fichier 2</div>
    <div id="file_3" class="file rightClick" name="Mon_fichier_3">Mon fichier 3</div>
  </div>
  <div id="log" style="display: none">
    <h2>log</h2>
  </div>
  <!-- mon contener de menu contextuel -->
  <div id="cxtMenuContener"></div>
</body>
</html>


Bon! j'espère que ça ne va décourager personne
et Merci pour le support.[/i][/i]