web-dev-qa-db-ja.com

Joomla $ document-> addScriptDeclaration with single quote and double quote

Joomlaの$ document-> addScriptDeclarationで一重引用符と二重引用符を使用しなければならない状況に苦しんでいます。

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

ここでの私の問題は、通常jQuery( "a [href ="#location "])で対処する必要のあるセレクターです。ここで、二重引用符で二重引用符を使用する状況です。単一引用符に変更することはできません。スクリプト宣言は一重引用符で囲みます。

この問題を解決するにはどうすればよいですか?

ビューの始まりは次のとおりです。

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

次のようにバックスラッシュを使用して引用符をエスケープする必要があります:

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

追加した一重引用符にも注意してください。

お役に立てれば

3
Lodder

ヒアドキュメントの文字列は次のように使用できます。

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

編集する

自分でテストできます。それは働いています:

$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

別のオプションと同様に、これよりも他の回答をお勧めしますが、出力バッファリングを使用して見積もりの​​問題を回避することもできます。

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