it-swarm.com.de

Joomla $ document-> addScriptDeclaration mit einfachen und doppelten Anführungszeichen

Ich habe mit der Situation zu kämpfen, dass ich in Joomla $ document-> addScriptDeclaration einfache und doppelte Anführungszeichen verwenden muss.

$document->addScriptDeclaration('
    jQuery(document).ready(function () {
        jQuery("a[href="#location").on('shown', function (e) {
            initialize();
        });
    });
');

Mein Problem hier ist der Selektor, der normalerweise mit jQuery ("a [href =" # location "]) angesprochen werden muss. Jetzt ist hier die Situation mit doppeltem Anführungszeichen im doppelten Anführungszeichen. Das Ändern zum einfachen Anführungszeichen ist nicht möglich, weil das Skript Die Deklaration erfolgt in einfachen Anführungszeichen.

Wie kann ich dieses Problem lösen?

Der Anfang der Ansicht ist:

// No direct access
defined('_JEXEC') or die;

//JHtml::addIncludePath(JPATH_COMPONENT.'helpers/html');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
JHtml::_('behavior.keepalive'); 

$document = JFactory::getDocument();

$document->addScriptDeclaration('
   jQuery(document).ready(function () {
        // remove top banner manual because it is a module loaded by list
        jQuery("#top-content-banner").remove();
        jQuery("a[href=\'#location\']").on("shown", function (e) {
            alert("Hello");
        });
    });
');
2
Perino

Sie müssen die Anführungszeichen mit umgekehrten Schrägstrichen wie folgt umgehen:

// No direct access
defined('_JEXEC') or die;

//JHtml::addIncludePath(JPATH_COMPONENT.'helpers/html');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
JHtml::_('behavior.keepalive'); 
JHtml::_('bootstrap.framework');

$document = JFactory::getDocument();

$document->addScriptDeclaration('
    jQuery(document).ready(function($) {
        $("a[href=\'#location\']").on("shown", function(e) {
            alert("it has worked");
        });
    }); 
');

Beachten Sie die einfachen Anführungszeichen, die ich auch hinzugefügt habe.

Hoffe das hilft

3
Lodder

Sie können die Heredoc-Zeichenfolge folgendermaßen verwenden:

$s = <<<SCRPT
    jQuery(document).ready(function () {
        jQuery("a[href='#location']").on('shown', function (e) {
            initialize();
        });
    });
SCRPT;
$document->addScriptDeclaration($s);

Bearbeiten

Sie können es selbst testen. Es funktioniert:

$s = <<<SCRPT
    jQuery(document).ready(function () {
        jQuery("a[href='#location']").on('click', function () {
            alert('Yes');
        });
    });
SCRPT;
$document->addScriptDeclaration($s);
echo '<a href="#location">Click Here</a>';
2
Farahmand

Eine weitere Möglichkeit wäre, andere Antworten als diese zu empfehlen. Sie können jedoch auch die Ausgabepufferung verwenden, um das Anführungszeichenproblem zu umgehen:

ob_start();
// close the php tag, so this would normally just print directly to the page
// output buffering will allow us to capture it and store it in a variable
?>
jQuery(document).ready(function () {
    jQuery("a[href='#location']").on('shown', function (e) {
        initialize();
    });
});
<?php
$s = ob_get_clean();
$document->addScriptDeclaration($s);
2
David Fritsch