3

我正在尝试为 Joomla 2.5 的下拉列表中的某些选择选项添加额外的 HTML 属性,并且希望使用内置的 HTML 帮助程序而不是自己编写 HTML。当前输出为:

<select>
    <option value="Red">Red</option>
</select>

但我希望它是这样的:

<select>
    <option value="Red" data-img="red.jpg">Red</option>
</select>

这样我就可以在所选选项更改时使用 Javascript 访问 data-img 属性。

我正在创建这样的选择选项:

$select = JHtml::_('select.option', "Red", "Red");

然后将它们传递给 JHTML 以创建通用列表 HTML:

$html = JHTML::_('select.genericlist', ...);

我查看了文档并尝试将各种不同的参数传递给函数,但就函数使用的所有选项(等)而言,它非常令人困惑option.attrattr而且谷歌也没有发现任何东西。

谁能告诉我需要传递给函数的额外参数才能正确地将额外属性添加到<option>元素中?

提前致谢!

4

2 回答 2

4

今天我在这个确切的场景中苦苦挣扎,需要使用选择的选项添加一些额外的数据。在对 joomla/libraries/joomla/html/html/select.php 文件进行彻底分析后,我成功地做到了这一点,但有一些缺点......

首先,在我的例子中,用于选择的数据来自数据库,需要为这种情况做一些准备:

$db =& JFactory::getDBO();
$sql = 'SELECT  nom AS value , nom AS text, prix FROM #__reservation_nourritures order by `ordering` asc';
$db->setQuery($sql);
$nourritures = $db->loadObjectList();
foreach ($nourritures as $nourriture){
    //the data to use MUST be in an array form for the extra html attributes...
    $nourriture->data = array('data'=>$nourriture->prix);
}

数据准备好后,您可以将其传递给 JHTML 函数来构建 select :

echo JHTML::_('select.genericlist',$nourriture,'myId',array('class'=>'nourritures','option.attr'=>'data'));

简而言之,必须使用“option.attr”将属性插入到选项中。注意:select.genericlist 函数必须只有 3 个参数才能工作。根据我对函数的理解,如果您将恰好 3 个参数传递给函数,属性只会合并到选项中,否则它只会忽略它。因此,例如,如果您想使用附加参数定义预选选项,那么您就不走运了。这是函数中有关此的部分:

if (is_array($attribs) && func_num_args() == 3)
{
    // Assume we have an options array
    $options = array_merge($options, $attribs);
}

据我了解,这是一个错误和/或不良行为。当我有时间时,我会在 joomla 跟踪器中填写一个错误。

于 2012-06-12T18:15:26.947 回答
1

你可以做这样的事情

$option = JHtml::_('select.option', "Red", "Red", array('option.attr' => 'optionattr', 'attr' => array('data-img' => "red.jpg")));

或者像这样

$option = JHtml::_('select.option', "Red", "Red");

$option->optionattr = array(
    'data-img' => "red.jpg"
);
于 2019-12-03T19:51:56.480 回答