首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用QuickForm添加禁用的选择选项?

如何使用QuickForm添加禁用的选择选项?
EN

Stack Overflow用户
提问于 2010-01-26 15:52:03
回答 2查看 9.4K关注 0票数 2

我有使用QuickForm的代码,它创建了一个带有以下内容的选择小部件:

代码语言:javascript
复制
$form->addElement( 'select', 'state_id', 'State:', statesArray() );

statesArray()查询数据库以获取可用的州,并返回一个具有链接到州名称的ids的关联数组。我在整个解决方案中都使用了类似的技术。

我想做的是在这个数组前面加上两个禁用的选项,这样默认情况下,选择菜单会显示类似“请选择一个州”的内容,后面跟着一个破折号,这两个选项都是禁用的。如果我没有使用QuickForm,select的前两个选项应该是:

代码语言:javascript
复制
  <option value="" disabled="disabled">Select a State</option>
  <option value="" disabled="disabled">-</option>

这两个选项都被禁用,如果用户保留第一个值上的选项,select小部件将提交一个空值,表单检查代码会使该值无效。

有没有办法用QuickForm做到这一点?

谢谢,Chuck

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-28 05:11:16

好的,在深入研究了QuickForm文档之后,我发现了这一点。解决方案是不使用数组填充select小部件,而是手动构建select元素,将其添加到表单中。

最初,我有这样的想法:

代码语言:javascript
复制
function dbArray( $tableName, $fieldName ) {
    $query = <<< EOT
SELECT   `id`, `$fieldName`
FROM     `$tableName`
ORDER BY `$fieldName`
EOT;

    $link = connectToDatabase();
    $result = mysql_query( $query, $link );
    while ( $rec = mysql_fetch_assoc( $result ) );
    {
        $array[$rec['id']] = $rec[$fieldName];
    }

    return $array;
}

function statesArray() {
    return dbArray( 'states', 'name' );
}

$form = new HTML_QuickForm( 'account', 'POST' );
$form->addElement( 'select', 'state_id', 'State:', statesArray() );

我做了一个版本,在将数组返回给调用代码之前,将array( 'none' => 'Please select a State' )放在dbArray调用的前面,但这并没有禁用该选项。添加规则以确认选择是数字是解决方法($form->addRule( 'state_id', 'You must select a state.', 'numeric' ))。但我仍然不喜欢它是可选择的。这是我找到的解决方案。

代码语言:javascript
复制
function statesSelect() {
    $select = HTML_QuickForm::createElement( 'select' );
    $select->addOption( 'Select a State', '', array( 'disabled' => 'disabled' ) );
    $select->addOption( '-', '', array( 'disabled' => 'disabled' ) );

    $statesArray = dbArray( 'states', 'name' );
    foreach ( $statesArray as $id => $name ) {
        $select->addOption( $name, $id );
    }

    return $select;
}

$form = new HTML_QuickForm( 'account', 'POST' );
$form->addElement( statesSelect() );
$form->addRule( 'state_id', 'You must select a state.', 'required' );

我希望这对其他人有帮助。:)

票数 11
EN

Stack Overflow用户

发布于 2010-01-26 16:11:56

从技术上讲,最好的解决方案是使用optgroup,但浏览器通常不会默认使用此值,而是使用select组中的第一个option

为什么不让您的Select State的值为"None“(类似于您给定的老式解决方案)并使其处于启用状态,然后让小部件在将其保留为空时将表单返回为无效?这是否超出了QuickForm的范围?

我认为大多数用户不会注意到某些东西是启用的还是禁用的,禁用的唯一好处是使其不可选。

您的目标是验证输入吗?如果是这样,为什么不在表单和QuickForm之间添加一些javascript,以检查用户在提交元素之前是否选择了禁用的(或value="Null")元素?

显然,我需要阅读QuickForm文档才能全面了解情况,但根据我从您的示例中获得的信息,您只需将Please Choose State => None添加到state_array中,然后让您计划使用的任何表单验证器都不接受"None“作为有效输入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2138089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档