Как вставить переменную $ в jQuery

Я работаю в Drupal с jQuery. Как вставить переменную php $ в тег.

$(document).ready(function(){
    $("#comment-delete-<?php print $variable ?>").click(function(){
        $("div.comment-<?php print $variable ?> span.body").replaceWith("new text");
    });
})

или же

$(document).ready(function(){
    $("#comment-delete-". $variable).click(function(){
        $("div.comment-". $variable ." span.body").replaceWith("new text");
    });
})

Несколько вещей, чтобы уточнить. Я работаю в Drupal, поэтому полный код выглядит так:

<?php
drupal_add_js (
    '$(document).ready(function(){
        $("#comment-delete-"' print $comment->cid; ').click(function(){
            $("div.comment-"' print $comment->cid; '" span.body").replaceWith("<span style=\'color: grey;\'>Please wait...</span>");
        });
    })',
'inline');
?>

но это все еще не работает.

Обновление: я попробовал следующее, но это все еще не работает

<?php
$testing = "42";
drupal_add_js (
    '$(document).ready(function(){
        $("#comment-delete-"'. $testing .').click(function(){
            $("div.comment-"'. $testing .'" span.body").replaceWith("<span style=\'color: grey;\'>Please wait...</span>");
        });
    })',
'inline');
?>

Если я использую число "42" вместо переменной, это работает, но не при использовании переменной... странно.

3 ответа

Решение

На основании вашего комментария:

<?php 
    drupal_add_js ('
        $(document).ready (function() { 
            $("#comment-delete-' . $variable . '").click (function() { 
                $("div.comment-' . $variable . ' span.body").replaceWith ("new text"); 
            }); 
        })
    ','inline');
?>

Вы должны объединить $variable, вместо printэто

$(document).ready(function(){
    $("#comment-delete-<?php print $variable ?>").click(function(){
        $("div.comment-<?php print $variable ?> span.body").replaceWith("new text");
    });
})

Поскольку PHP выполняется ДО загрузки страницы, второй метод не будет работать. На самом деле, второй смешивает два разных языка, которые работают в разное время, что означает... он все равно не будет работать.


Это то, что происходит.

Страница запросов браузера

PHP создает страницу HTML
PHP ищет файл для <?php ?> теги и запускает код внутри них:

$(document).ready(function(){
    $("#comment-delete-<?php print $variable ?>").click(function(){
        $("div.comment-<?php print $variable ?> span.body").replaceWith("new text");
    });
})

Приведенный выше пример создаст это после анализа:

$(document).ready(function(){
    $("#comment-delete-mytag").click(function(){
        $("div.comment-mytag span.body").replaceWith("new text");
    });
})

Сервер отправляет страницу в браузер

Браузер читает страницу

Javascript работает:

$(document).ready(function(){
    $("#comment-delete-mytag").click(function(){
        $("div.comment-mytag span.body").replaceWith("new text");
    });
})

Если вы заметили, PHP просто создает веб-страницу для отправки в браузер. Поэтому все, что вам нужно сделать с помощью PHP - это создать код Javascript. При работе в PHP вы никогда не должны следовать никаким правилам синтаксиса Javascript. Вы должны просто сделать правильный синтаксис Javascript, когда он попадает в браузер. АКА Вы можете вставить все <?php ?> Тэги, которые вы хотите, до тех пор, пока страница попадает в браузер, это действительный Javascript.


Если вы передаете код в функцию, как указано в вашем комментарии, вы создадите строку, которая заключена в кавычки, и в этом случае ваш второй пример будет правильным:

drupal_add_js (
    '$(document).ready(function(){
        $("#comment-delete-'. $variable . ').click(function(){
            $("div.comment-'. $variable . ' span.body").replaceWith("<span   style=\'color: grey;\'>Please wait...</span>");
        });
    })',
'inline');

[править] Упс, неважно, я просто понял, что точный ответ уже опубликован, я просто не был достаточно осторожен, чтобы следовать ему..

Другие вопросы по тегам