CodeIgniter - 无线电输入上的 PHP Set_Radio

Posted

技术标签:

【中文标题】CodeIgniter - 无线电输入上的 PHP Set_Radio【英文标题】:CodeIgniter - PHP Set_Radio on Radio Input 【发布时间】:2012-10-09 10:42:14 【问题描述】:

我正在开发一个网站,但遇到了问题。为了预先设置或重新输入选定的值,Codeigniter 允许您使用 set_radio 来解决您的问题,请参见此处:

<td>Do You Have a PayPal Account <span class="error">*</span> : </td>
<td colspan="2" align="left" valign="top"><label>   
  <!-- used for validation -->
    <input type="hidden" id="temp_mid" value="" />
    <input name="mail_account" type="radio" id="p_same" value="same" onclick="dohide_show(this.value);" <?php echo set_radio('mail_account', 'same'); ?>/> Yes(same as email address as above.)<br/>
    <input name="mail_account" type="radio" id="p_diff" value="diff" onclick="dohide_show(this.value);" <?php echo set_radio('mail_account', 'diff'); ?>/> Yes(different than above.)<br/>
    <input name="mail_account" type="radio" id="p_checkInMail" value="checkInMail" onclick="dohide_show(this.value);" <?php echo set_radio('mail_account', 'checkInMail'); ?>/> No(I would prefer to receive a check in the mail.)                  
     <?php echo form_error('mail_account'); ?>           

 </td>

这在验证后工作得非常好,因为如果表单的另一部分有错误,则选择了前一个单选按钮。但是,当用户更正错误后尝试重新提交页面时,单选选项的验证失败,要求我再次单击单选按钮,即使单选按钮在我之前选择的选项上被视觉选中。所以我必须再次选择单选按钮,然后才能重新提交表单。在这里可以看到调用的警报:

function validate_playpal()
           
            var temp=$('#temp_mid').val();
            if(temp=="")
            
                alert('Please select the PayPal account option.');                  
                $('#p_same').focus();
                return false;
            
            if(document.getElementById('p_diff').checked== true && document.getElementById('paypal_emailid').value=='')
            
                alert('Please provide your PayPal email address.');
                document.getElementById('paypal_emailid').focus();
                return false;
            

            if(document.getElementById('paypal_emailid').value!='')
            
                if(!email_format(document.getElementById('paypal_emailid').value))
                    alert('Please enter valid email address.');
                    document.getElementById('paypal_emailid').value="";
                    document.getElementById('paypal_emailid').focus();
                    return false;               
                
            
            return true;
        

有谁知道为什么这不起作用,即使它正确地重新填充了表单?谢谢。

编辑:

对于询问 Mid_temp 做什么的每个人,在我看来,如果不需要选择按钮,它只会隐藏按钮。在我的代码中,这些是唯一提到的地方:

    $('#bx').hide();
if(document.getElementById('p_diff').checked==true)    
    $('#bx').show();


function dohide_show(val)
    if(val=='diff')
           
        $('#bx').show();
        $('#paypal_emailid').val('');
        document.getElementById('p_diff').checked=true;
        $('#temp_mid').val('clicked');
    
    else if(val=='same')
           
        $('#bx').hide();
        $('#paypal_emailid').val($('#email_id').val());
        $('#temp_mid').val('clicked');  
    
    else
    
        $('#bx').hide();
        $('#paypal_emailid').val($('#email_id').val());
        $('#temp_mid').val('clicked');
    


在这里,在一个完全独立的文件中:

function hide_box()
            
                $('#bx').hide();
                $('#paypal_emailid').val('');
                $('#temp_mid').val('clicked');
            
            function show_box()
            
                $('#bx').show();
                $('#paypal_emailid').focus();
                $('#temp_mid').val('clicked');
            

此外,Paypal 电子邮件 ID 只是检查用户输入的 paypal 电子邮件地址(如果他们有 paypal 帐户)。谢谢大家的帮助。

【问题讨论】:

请提供dohide_show(this.value);函数 什么警报叫?什么是paypal_emailid 元素?填充temp_mid 元素的函数是什么?提供有关您的问题的更多信息,我会尽力帮助您 明天我会尽力为您提供更多信息,因为我现在无法访问它。对不起 email ID 只是查看用户是否有一个 paypal 电子邮件,然后验证它,如果他/她没有,则不用担心。名为“请选择 Paypal 帐户选项”的警报。 temp_mid 只是看是否显示这组问题。我已将新代码放在编辑中。 【参考方案1】:

我发现您没有重新填充 id="temp_mid" 字段,但请在此处查看 if(temp=="") 。也许您也需要重新填充它?

【讨论】:

尝试用&lt;input type="hidden" id="temp_mid" value="&lt;?php echo ($this-&gt;input-&gt;post('mail_account')) ? 'clicked' : ''?&gt;" /&gt;替换&lt;input type="hidden" id="temp_mid" value="" /&gt; 这意味着如果在 POST 中传递了 mail_account 字段,则使用 clicked 值重新填充 temp_mid 字段【参考方案2】:

您收到什么错误消息,“请选择 PayPal 帐户选项。”?

这总是会失败的

<input type="hidden" id="temp_mid" value="" />

......
var temp=$('#temp_mid').val();
if(temp=="")

    alert('Please select the PayPal account option.');                  
    $('#p_same').focus();
    return false;

【讨论】:

好吧,它并不总是失败......只有当其他事情失败时。但是等等,为什么总是失败?好吧,在修复了其他验证失败的问题后,我总是得到请选择 Paypal 选项。 请用您所做的任何更改更新您上面的代码。 temp_mid 有什么作用? 是否隐藏单选框。将该代码添加到编辑中。【参考方案3】:

正如@Mikhail 建议的那样,您不会重新填充temp_mid 隐藏字段的值。为了避免重新填充它,您可以处理该字段并检测是否已使用 jQuery 按以下方式选择了单选按钮的选项:

function validate_playpal()
   
    if($('[name="mail_account"]:checked').size() > 0)
    
        alert('Please select the PayPal account option.');                  
        $('#p_same').focus();
        return false;
    
    ...
    return true;

注意第三行$('[name="mail_account"]:checked').size() &gt; 0中的if语句。

希望对你有帮助-

【讨论】:

以上是关于CodeIgniter - 无线电输入上的 PHP Set_Radio的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter:将无线电值传递给数据库

codeigniter上的PHP短标签错误

xampp 上的 codeigniter 想让我在 uri 中使用 index.php

从 localhost 和 apache 服务器上的 codeigniter 项目中删除 index.php

codeigniter 3 - 删除 index.php:Linux 上的错误 404,但在 Windows 上工作正常

jQuery Blueimp FileUpload 上的 DELETE 方法不允许使用 Codeigniter/PHP(405 错误)?