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");
});
});
');
次のようにバックスラッシュを使用して引用符をエスケープする必要があります:
// 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");
});
});
');
追加した一重引用符にも注意してください。
お役に立てれば
ヒアドキュメントの文字列は次のように使用できます。
$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>';
別のオプションと同様に、これよりも他の回答をお勧めしますが、出力バッファリングを使用して見積もりの問題を回避することもできます。
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);