【问题标题】:Populating a drop down list with a combination of PHP and Javascript使用 PHP 和 Javascript 组合填充下拉列表
【发布时间】:2012-01-03 13:25:54
【问题描述】:

我有以下看法

<form action=<?=$target;?> method="post" name="editForm">
    <div id="page1">
        <select id="categories" name="category" onmouseover="populateCategory(<?=$result?>, <?=$id?>)" >
        </select>
    </div>
</form>

在选择标签上使用以下 javascript 函数

function populateCategory(subCategories, id) {

    var select = document.getElementById(id);

    var opt = document.createElement("option");

    opt.text = "--Please make a selection--";

    for (i = 0; i < subCategories.length; i++) {
        var opt = document.createElement("option");

        opt.value = i;
        opt.text = subCategories[i];

        select.add(opt);
    }
}

传递给函数的参数是以下变量:

 $result = $this->getCategories(0);
$id = 'categories';

调用以下函数

public function getCategories($parent, $published = 1) {

        //Sanitize Params...    

        //$sanParent = $this->db->getEscaped($parent);
        //$sanPublished = $this->db->getEscaped($published);

        $query = 
        "SELECT * FROM #__adsmanager_categories 
        WHERE parent = " . $parent .
        " AND published = " . $published;

        $this->db->setQuery($query);
        $result = $this->db->loadAssocList();

        var_dump($parent);

        if (!$result) {
            return false;
        }

        return $result;

    }

低调:

我发布的最后一个函数向数据库发出请求,获取旨在用于创建下拉列表的类别列表。我认为如果我将获得的类别传递给 JavaScript 函数,我可能能够以简单的方式填充它。我做错了吗?我觉得这是一个 JavaScript 问题,因为函数调用似乎没有发生。例如,当我打开浏览器调试器时,没有迹象表明它是否被调用。

更新:

这是 html-source 列出的内容:

<script type="text/javascript">

function populateCategory(subCategories, id) {



    var select = document.getElementById(id);



    var opt = document.createElement("option");



    opt.text = "--Please make a selection--";



    for (i = 0; i < subCategories.length; i++) {

        var opt = document.createElement("option");



        opt.value = i;

        opt.text = subCategories[i];



        select.add(opt);

    }

}

</script>



<form action=/index.php?option=com_adsmanager&amp;task=write&amp;Itemid=1 method="post" name="editForm">

    <div id="page1">

        <select id="categories" name="category" onmouseover="populateCategory(Array, categories)" >

        </select>

    </div>

</form>

【问题讨论】:

  • 你在哪里声明这个变量? subCategories 在你的 JS 函数中。
  • 您的问题与 AJAX 有什么关系?还是标签加错了?
  • I have a feeling it's a JavaScript issue - 如果你有这种感觉,你必须在这里放一段JS代码,而不是PHP代码。
  • 确实发布了 JS 代码。如果您查看我列出的第一个函数并读取它,您会注意到它是 JavaScript。 ;) 就 AJAX 参考而言,这是我的一个错误。为清晰起见进行编辑。
  • @Lance 已修复。我尝试在我的代码中纠正它,但不幸的是它仍然没有做任何事情。

标签: php javascript mysql html


【解决方案1】:

我不是 javascript 问题,而是理解问题。

which calls the following function

JS 不能调用 PHP 函数。因为它在 浏览器 中运行,而 PHP 在 服务器 上运行,一千英里之外。
恰恰相反,它确实是 PHP 创建了所有的 JS 以及 HTML 和其他东西。

因此,您的 PHP 代码必须创建已填充数据的 JS 函数调用。
你检查过 HTML 源代码吗?是否包含正确的 JS 函数调用?

更新 看,一贴实际的JS,就变得像鸡蛋一样简单

<select id="categories" name="category" onmouseover="populateCategory(Array, categories)" >

它只说“数组”而不是实际数据。
表示您正在尝试将数组打印为字符串。这显然行不通。
使用一些循环来迭代该数组并以适当的(对于 JS)格式打印它的内容。

【讨论】:

  • 我从来没有说过 JS 是在调用 php 函数。我说过我在视图顶部声明的变量正在调用 php 函数。如果您仔细阅读我所说的内容,您会注意到调用 JavaScript 的是 html,而后者又接受两个 php arguments
  • 好的,好的。那么,您检查过 HTML 源吗?是否包含正确的 JS 函数调用?
  • 好吧,看来你还是不太明白 PHP 和 JS 的区别。事实上,它是不同的 程序,您根本无法将 PHP 参数传递给 JS 函数。您必须从 PHP 创建整个 JS。也包括参数
  • 无论你喜欢什么 JS 格式 - JSON, new Array... 顺便说一句,你为什么不想在 PHP 中填充这个列表,根本不使用 JS?
  • 原因是我必须根据用户选择的任何类别填充辅助列表。二级列表是子类别的列表。例如,如果用户选择“车辆”,则列出的一些子类别将是“汽车”、“飞机”等。无论如何,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 2018-03-12
  • 2017-10-16
  • 2022-01-11
相关资源
最近更新 更多