带有复选框的表单输入字段,反之亦然 - 缺少第一个值

Posted

技术标签:

【中文标题】带有复选框的表单输入字段,反之亦然 - 缺少第一个值【英文标题】:Form with checkboxs to input field and vice versa - missing first value 【发布时间】:2013-04-18 02:07:15 【问题描述】:

我有一个小表单,其中我将数组 $menu 列为复选框。

使用 jQuery(参见下面的脚本)然后我将复选框的值放入(最终隐藏的)输入字段中。我知道这不是传统方式,但我想将它们全部存储为一个统一的值。

当再次加载表单时(或提交后),我当然需要使用存储为字符串的值(来自输入字段)再次填充这些字段。

我使用一个简单的strpos() 和一个三元运算符来表示"checked"

我的问题是,在每次加载时,列表中检查的第一个值将不会被确认,也不会被检查。始终是 first oneonly the first one (在列表中位于上方 - 我不是指 ABSOLUTE 第一个,而是第一个要检查的。保存字符串中的第一个。)。这意味着如果我显示输入字段(不隐藏),我可以看到字符串中的值,但复选框不是"checked"

其他一切都运行良好....

也许只是我的眼睛累了,但我真的找不到问题所在:-)

任何意见将不胜感激..

global $menu;
    $output = '';

    for ($i = 1; $i <= 100; $i++)
        if ($menu[$i][2])

        $find = $menu[$i][2];
        $pos = strpos($opp_array['brsa_menu_list'], $find);

            $output .=  '</br><input class="checkbox remove_check" type="checkbox" ' .(($pos) ? ' checked ':'') . 'name="option1" value="'  . $menu[$i][2] .'"> '  . $menu[$i][2] ;
        
     
echo '<b>Available menus  :  </b><br>' . $output .'<br>';

?>

<p>
    <input class="regular-text" id="sbrsamenu_list" name="brsa_s[brsa_menu_list]" type="text" value="<?php echo $opp_array['brsa_menu_list']; ?>"/>

    <label class="description" for="sbrsamenu_list">
    </br><?php echo 'Please write the menu items'; ?>
    </label>
</p>

和js

<script type="text/javascript">

    // <![CDATA[
        jQuery(document).ready(function() 

    var $checkboxes = jQuery(".remove_check");
    $checkboxes.on('change', function() 
        var ids = $checkboxes.filter(':checked').map(function() 
            return this.value;
        ).get().join(' | ');
        jQuery('#sbrsamenu_list').val(ids);
    );


        );

    // ]]>
</script>

【问题讨论】:

我没有费心去详细研究这个问题(抱歉),但尝试将for ($i = 1; $i &lt;= 100; $i++) 更改为for ($i = 0; $i &lt;= 100; $i++)。它可能会有所帮助 @Kuro - 它没有.. :-) 【参考方案1】:

如果$pos 是一个布尔值,表示一个字符串是否出现在另一个字符串中,您应该将strpos() 中的值与false 进行比较:

$pos = strpos($opp_array['brsa_menu_list'], $find) !== false;

否则,如果 $find 出现在字符串的开头,strpos() 将返回 0,在您的代码中将等效于 false

【讨论】:

亲爱的上帝。现在可以了。但我完全糊涂了。为什么这只会影响 FIRST 选中的值,而其余的都可以正常工作?我在那里可能有 25 个值,并且我尝试了所有可能的组合,除了总是跳过第一个之外,它们都有效。如果strpos() 的实现是错误的,它不应该全部失败吗? (我也不熟悉您发布的语法 - 我现在会尝试研究 :-) ... @ObmerkKronen 如果在搜索字符串的第一个字符之外的任何地方找到匹配项,它将按预期工作;这就是strpos() 的工作原理;如果字符串没有出现,则返回false 好的,谢谢,所以只是为了更好地理解 - 这意味着如果我将在字符串的开头添加另一个分隔符管道 (|) 作为第一个字符,那么我的原始代码会有效吗?

以上是关于带有复选框的表单输入字段,反之亦然 - 缺少第一个值的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单中使用复选框并控制输入字段

验证隐藏的多复选框/输入字段

Django内置表单字段

使用 h:selectBooleanCheckbox 显示/隐藏另一个输入字段

带有两个提交按钮的 Django 表单。 . .一个需要字段,一个不需要

输入字段表单验证 - 复选框