在 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");