30 votes

"48" apparaissant dans le code JavaScript au lieu de "$ ("

Sur un site que je suis en train de travailler sur il y a des nombres aléatoires apparaissant dans un très simple, peu de JQuery. Je n'ai aucune idée de pourquoi il ferait cela.

Au lieu de ce qui est destiné à apparaître, ces chiffres, 48 etc apparaissent au début. Comme ceci

<script type="text/javascript">
    48 48document).ready(function () {
    48 48".closed").click(function () {         
        48 48this).find("div.but").toggleClass('plus').toggleClass('minus');           
             48 48this).toggleClass('closed').toggleClass('open');    
        });    
    });        
</script>

Je ne peux même pas commencer à imaginer pourquoi il crache quand j'ai codé en dur dans le site et il n'y a aucun fichier externe ou quoi que ce soit.

OK, donc, puisque c'est de Perl, j'ai besoin d'échapper $(, mais comment?

J'ai pris un coup d'oeil à la documentation Perl, et je me sentais comme si j'avais été un coup de poing.

Dois-je simplement utiliser des apostrophes à la place des guillemets?

 <script type="text/javascript">
    $(document).ready(function () {
    $('.closed').click(function () {


        $(this).find('div.but').toggleClass('plus').toggleClass('minus');

         $(this).toggleClass('closed').toggleClass('open');

    });

});

    </script>

Voici la pleine script Perl. C'est l'en-tête d'un site.

###########################
## META DATA AND HEADERS ##
###########################

$be_strict = 0;    # 1 = 404 on page not found
if ((!$title{$loadpage} || !$h1{$loadpage} || !$description{$loadpage} || !$keywords{$loadpage} || !$breadcrumb{$loadpage}) && $be_strict) {
  print "Status: 302 Found\r\n" .
      "Location: http://www.realots.co/404/\r\n" .
      "\r\n";
  exit(0);
} 

if ($action) {

  #############################
  ## Highscore page SEO Hack ##
  #############################

  if ($action eq "fish") {
    $breadcrumb{'highscores'}     = "<a href='http://stackoverflow.com/'>RealOTS</a> &raquo; <a href='http://stackoverflow.com/highscores/'>Highscores</a> &raquo; <b>Fishing Skill</b>";
    $h1{'highscores'}             = "RealOTS Fishing Highscores";
    $title{'highscores'}          = "RealOTS Top Fishing Skill";
    $description{'highscores'}    = "Fishing Skill Highscore list of our RealOTS. Check out these amazing fishermen!";
    $keywords{'highscores'}       = "realots,otserv,tibia,highscore,hiscores,fishing,top fishing";
  }
  elsif ($action eq "ml") {
    $breadcrumb{'highscores'}     = "<a href='http://stackoverflow.com/'>RealOTS</a> &raquo; <a href='http://stackoverflow.com/highscores/'>Highscores</a> &raquo; <b>Magic Level</b>";
    $h1{'highscores'}             = "RealOTS Magic Highscores";
    $title{'highscores'}          = "RealOTS Top Magic Level";
    $description{'highscores'}    = "Magic Level Highscore list of our RealOTS. Check out these fearsome mages!";
    $keywords{'highscores'}       = "realots,otserv,tibia,highscore,hiscores,magic,top magic";
  }
  elsif ($action eq "sword") {
    $breadcrumb{'highscores'}     = "<a href='http://stackoverflow.com/'>RealOTS</a> &raquo; <a href='http://stackoverflow.com/highscores/'>Highscores</a> &raquo; <b>Sword Fighting</b>";
    $h1{'highscores'}             = "RealOTS Sword Fighting Highscores";
    $title{'highscores'}          = "RealOTS Top Sword Fighters";
    $description{'highscores'}    = "Sword Fighting Highscore list of our RealOTS. Fear the mighty sword wielder!";
    $keywords{'highscores'}       = "realots,otserv,tibia,highscore,hiscores,sword,top sword";
  }
  elsif ($action eq "axe") {
    $breadcrumb{'highscores'}     = "<a href='http://stackoverflow.com/'>RealOTS</a> &raquo; <a href='http://stackoverflow.com/highscores/'>Highscores</a> &raquo; <b>Axe Fighting</b>";
    $h1{'highscores'}             = "RealOTS Axe Fighting Highscores";
    $title{'highscores'}          = "RealOTS Top Axe Fighters";
    $description{'highscores'}    = "Axe Fighting Highscore list of our RealOTS. Behold these savage beasts with their amazing axe skills!";
    $keywords{'highscores'}       = "realots,otserv,tibia,highscore,hiscores,axe,top axe,axe fighting";
  }
  elsif ($action eq "club") {
    $breadcrumb{'highscores'}     = "<a href='http://stackoverflow.com/'>RealOTS</a> &raquo; <a href='http://stackoverflow.com/highscores/'>Highscores</a> &raquo; <b>Club Fighting</b>";
    $h1{'highscores'}             = "RealOTS Club Fighting Highscores";
    $title{'highscores'}          = "RealOTS Top Club Fighters";
    $description{'highscores'}    = "Club Fighting Highscore list of our RealOTS. Caveman-like agility all around!";
    $keywords{'highscores'}       = "realots,otserv,tibia,highscore,hiscores,club,top club,club fighting";
  }
  elsif ($action eq "dist") {
    $breadcrumb{'highscores'}     = "<a href='http://stackoverflow.com/'>RealOTS</a> &raquo; <a href='http://stackoverflow.com/highscores/'>Highscores</a> &raquo; <b>Distance Fighting</b>";
    $h1{'highscores'}             = "RealOTS Distance Fighting Highscores";
    $title{'highscores'}          = "RealOTS Top Distance Fighters";
    $description{'highscores'}    = "Distance Fighting Highscore list of our RealOTS. Death from afar, raining from the sky!";
    $keywords{'highscores'}       = "realots,otserv,tibia,highscore,hiscores,distance,top distance,distance fighting";
  }
  elsif ($action eq "shield") {
    $breadcrumb{'highscores'}     = "<a href='http://stackoverflow.com/'>RealOTS</a> &raquo; <a href='http://stackoverflow.com/highscores/'>Highscores</a> &raquo; <b>Shielding</b>";
    $h1{'highscores'}             = "RealOTS Shielding Highscores";
    $title{'highscores'}          = "RealOTS Top Shielding";
    $description{'highscores'}    = "Shielding Highscore list of our RealOTS. These tanks are able to withstand tremendeous blows!";
    $keywords{'highscores'}       = "realots,otserv,tibia,highscore,hiscores,shielding,top shielding";
  }
  elsif ($action eq "fist") {
    $breadcrumb{'highscores'}     = "<a href='http://stackoverflow.com/'>RealOTS</a> &raquo; <a href='http://stackoverflow.com/highscores/'>Highscores</a> &raquo; <b>Fist Fighting</b>";
    $h1{'highscores'}             = "RealOTS Fist Fighting Highscores";
    $title{'highscores'}          = "RealOTS Top Fist Fighters";
    $description{'highscores'}    = "Fist Fighting Highscore list of our RealOTS. They had special training by sensai Chuck Norris!";
    $keywords{'highscores'}       = "realots,otserv,tibia,highscore,hiscores,fist,top fist,fist fighting";
  }
}

#&print_header();
$web_content .= qq{
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

    <title>$title{$loadpage}</title>
    <meta name="google-site-verification" content="Z97W94Kp7MlIOgiaMAYcFA4Lp4i5hckXdncRarXkBxk" />
    <meta name="google-site-verification" content="I5HTpL8jLRcdrWk3jD83qIFDBkS4G_rmWHlxEq94jLU" />
    <style type="text/css">
      table.outlined {
        border-width: 1px;
        order-style: solid;
        border-color: #9999CC;
        border-collapse: separate;
      }
      a.suggestions:visited{color:#0000FF;text-decoration:none;}
      a.suggestions:link{color:#0000FF;text-decoration:none;}
      a.suggestions:hover{color:#305997;text-decoration:none;}

.trans {
        filter:alpha(opacity=50);
        -moz-opacity:0.5;
        -khtml-opacity: 0.5;
        opacity: 0.5;
}

    </style>
<!--[if IE 6]>
<![endif]-->
<!--[if IE 6]>
<style type="text/css">
html { overflow-y: hidden; }
body { overflow-y: auto; }
img#bg { position:absolute; z-index:-1; }
#content { position:static; }
</style>
<![endif]-->

};

if ($no_index{$loadpage}) {
  $web_content .= qq{    <meta name="Robots" content="NOINDEX,NOFOLLOW,NOARCHIVE,NOSNIPPET" />};
} else {
  $web_content .= qq{    <meta name="Robots" content="index,follow" />};
}

$web_content .= qq{
    <meta name="keywords" content="$keywords{$loadpage}">
    <meta name="description" content="$description{$loadpage}">
    <meta name="author" content="RealOTS" />
    <meta name="Expires" content="never" />
    <link rel="stylesheet" type="text/css" href="http://stackoverflow.com/images/style.css" />
    <script type="text/javascript" src="http://www.mollie.nl/partners/js/96481.js"></script>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>


   <script type="text/javascript">
    $(document).ready(function () {
    $(".closed").click(function () {


        $(this).find("div.but").toggleClass('plus').toggleClass('minus');

         $(this).toggleClass('closed').toggleClass('open');

    });

});

    </script>




  </head>
};

45voto

Paul Roub Points 11185

$( est un Perl variable prédéfinie, de l'expansion du processus de l'ID de groupe de la liste.

Si vous êtes sur un ordinateur qui prend en charge l'appartenance à plusieurs groupes simultanément, donne une liste séparée par des espaces de groupes vous sont dans. Le premier numéro est celui retourné par getgid() , et les suivants par getgroups() , dont l'une peut être le même que le premier numéro.

Voir perlvar docs pour plus de détails.

Pour éviter ce problème, assurez-vous d'échapper $( (et de tout autre javascript $ caractères) en Perl chaînes, ou utiliser '' au lieu de "" pour éviter l'interpolation.

Mauvais:

$html = "$(document).ready(...)";

Bon:

$html = "\$(document).ready(...)";
$html = '$(document).ready(...)';

Dans le code ci-dessus, par exemple, le script de l'article devrait être:

   <script type="text/javascript">
    \$(document).ready(function () {
    \$(".closed").click(function () {


        \$(this).find("div.but").toggleClass('plus').toggleClass('minus');

         \$(this).toggleClass('closed').toggleClass('open');

    });

});

    </script>

12voto

joatis Points 997

En plus des suggestions d'échappement de Paul ci-dessus, je préfère utiliser la méthode de citation alternative que vous avez utilisée ci-dessus, donc je n'ai pas à échapper chaque chaîne et citation dans mon Javascript. Mettre une chaîne entre q {} vous évitera d'avoir à échapper à chaque signe dollar. Tant que vous n'avez pas besoin d'interpolation dans ce bloc, tout ira bien!

Votre code pourrait donc s'écrire:

 $web_content .= q{
   <script type="text/javascript">
    $(document).ready(function () {
        $(".closed").click(function () {


             $(this).find("div.but").toggleClass('plus').toggleClass('minus');

             $(this).toggleClass('closed').toggleClass('open');

        });

    });

    </script>
};
 

8voto

Praveen Kumar Points 29309

puisque vous êtes la génération du code via Perl, $( est réservé à un en Perl. Le mettre dans une variable en donner une concaténation de chaîne.

La Documentation

Depuis Perl 5.6, Perl, les noms de variables peuvent être des chaînes alphanumériques commençant par les caractères de contrôle (ou mieux encore, un accent circonflexe). Ces variables doivent être écrit sous la forme ${^Foo} ; les accolades ne sont pas facultatifs. ${^Foo} désigne la variable scalaire dont le nom est un contrôle-F suivi par deux o 's. Ces variables sont réservés pour de futures utilisations spéciales en Perl, sauf pour ceux qui commencent avec ^_ (contrôle-trait de soulignement ou signe-trait de soulignement). Aucun des caractères de contrôle nom qui commence par ^_ permettra d'acquérir une signification particulière dans une future version de Perl; de tels noms peuvent donc être utilisés en toute sécurité dans les programmes. $^_ lui-même, cependant, est réservé.

Solution

L'utilisation d'une de ces:

"\$(document).ready(...)";
'$(document).ready(...)';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X