it-swarm-es.tech

Joomla $ document-> addScriptDeclaration con comillas simples y comillas dobles

Estoy luchando con la situación de que tengo que usar comillas simples y comillas dobles en Joomla $ document-> addScriptDeclaration.

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

Mi problema aquí es el selector que generalmente debe abordarse con jQuery ("a [href =" # location "]). Ahora aquí está la situación con comillas dobles en comillas dobles. No es posible cambiar a comillas simples, porque el script La declaración está entre comillas simples.

¿Como puedo resolver este problema?

El comienzo de la vista es:

// 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

Necesita escapar de las comillas usando barras diagonales al revés de la siguiente manera:

// 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");
        });
    }); 
');

Tenga en cuenta las comillas simples que he agregado también.

Espero que esto ayude

3
Lodder

Puede usar la cadena Heredoc de esta manera:

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

Editar

Puedes probarlo tú mismo. Esta funcionando:

$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

Como otra opción, aunque recomendaría otras respuestas sobre esta, también puede usar el almacenamiento en búfer de salida para evitar el problema de la cita:

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