在 Joomla 中,为什么在模块中使用时提前输入会中断?
In Joomla, why does typeahead break when used in a module?
使用 Joomla 版本 3.7.5 和 Wright 模板。
我在左侧边栏中有一个模块,它有 2 个预输入字段从本地数据库获取数据。 php 代码通过 sourcerer 插件使用 include_once 引用。
typeahead 在模块中使用时不起作用。但是 - 如果我在一篇文章中使用完全相同的代码,则 typeahead 工作正常。
文章和模块 load/behave 有何不同?如果有人能解释这种行为,我将不胜感激。
代码的相关部分如下。
PHP - 第一行代码是:
JHtml::_('script', './templates/js_wright/wright/js/jquery.js');
JHtml::_('script', './styling/bootstrap3-typeahead.min.js');
$document->addStyleSheet("./media/jui/css/bootstrap.css",'text/css',"screen");
HTML - 形式为:
<div class="input-prepend span8"><span class="add-on" ><i class="icon-map-marker" ></i></span><input autocomplete="off" style="border-color:#F7980F;" class="typeahead" id="inputIcon" type="text" name="collectionpoint" /></div>
Javascript:
$('input.typeahead').typeahead({
source: function (query, process) {
return $.get('./towns.php', { query: query }, function (data) {
console.log(data);
data = $.parseJSON(data);
return process(data);
});
}
});
并在 towns.php 中:
$sql = "SELECT Town FROM lkp_towns
WHERE Town LIKE '%".$_GET['query']."%'
LIMIT 5";
$result = $mysqli->query($sql);
$json = [];
while($row = $result->fetch_assoc()){
$json[] = $row['Town'];
}
echo json_encode($json);
解决了。
Joomla 不会将模块视为单独的页面,而是将其视为主页的嵌套 div。
将以下行移动到模块显示的主要文章页面解决了问题,因为在加载其他任何内容之前需要引用 .js:
已将其从模块中删除并包含在文章中:
JHtml::_('script', './templates/js_wright/wright/js/jquery.js');
JHtml::_('script', './styling/bootstrap3-typeahead.min.js');
$document->addStyleSheet("./media/jui/css/bootstrap.css",'text/css',"screen");
使用 Joomla 版本 3.7.5 和 Wright 模板。
我在左侧边栏中有一个模块,它有 2 个预输入字段从本地数据库获取数据。 php 代码通过 sourcerer 插件使用 include_once 引用。
typeahead 在模块中使用时不起作用。但是 - 如果我在一篇文章中使用完全相同的代码,则 typeahead 工作正常。
文章和模块 load/behave 有何不同?如果有人能解释这种行为,我将不胜感激。
代码的相关部分如下。
PHP - 第一行代码是:
JHtml::_('script', './templates/js_wright/wright/js/jquery.js');
JHtml::_('script', './styling/bootstrap3-typeahead.min.js');
$document->addStyleSheet("./media/jui/css/bootstrap.css",'text/css',"screen");
HTML - 形式为:
<div class="input-prepend span8"><span class="add-on" ><i class="icon-map-marker" ></i></span><input autocomplete="off" style="border-color:#F7980F;" class="typeahead" id="inputIcon" type="text" name="collectionpoint" /></div>
Javascript:
$('input.typeahead').typeahead({
source: function (query, process) {
return $.get('./towns.php', { query: query }, function (data) {
console.log(data);
data = $.parseJSON(data);
return process(data);
});
}
});
并在 towns.php 中:
$sql = "SELECT Town FROM lkp_towns
WHERE Town LIKE '%".$_GET['query']."%'
LIMIT 5";
$result = $mysqli->query($sql);
$json = [];
while($row = $result->fetch_assoc()){
$json[] = $row['Town'];
}
echo json_encode($json);
解决了。
Joomla 不会将模块视为单独的页面,而是将其视为主页的嵌套 div。
将以下行移动到模块显示的主要文章页面解决了问题,因为在加载其他任何内容之前需要引用 .js:
已将其从模块中删除并包含在文章中:
JHtml::_('script', './templates/js_wright/wright/js/jquery.js');
JHtml::_('script', './styling/bootstrap3-typeahead.min.js');
$document->addStyleSheet("./media/jui/css/bootstrap.css",'text/css',"screen");