我想在页面加载时检查某些单选按钮组中的某些特定单选按钮?

Posted

技术标签:

【中文标题】我想在页面加载时检查某些单选按钮组中的某些特定单选按钮?【英文标题】:I want to check some particular radiobutton in some radiobutton groups when page loads? 【发布时间】:2013-06-23 06:17:00 【问题描述】:

我正在使用 django。

我的网页是这样工作的,如果我选中单选按钮并单击提交。它重定向到同一页面,并根据选中的单选按钮重新定义作业。我的问题是after loading the page none of the radio buttons are checked

我想在单击提交之前检查已选中的单选按钮

代码

class MyHome(View):
    filter_options=(
        (('exp','Jobs by Experience'),
            (['l1','Less Than 1 year',0],
                ['1b2','1 to 2 Years',0],
                ['2b3','2 to 3 Years',0],
                ['3b5','3 to 5 Years',0],)),
        (('sal','Jobs by Salary'),
            (['l1000','Less Than $1000',0],
                ['1000b3000','$1000 to $3000',0],
                ['3000b5000','$3000 to $5000',0])),
        (('loc','Jobs by Location'),
            (['che','Chennai',0],
                ['ban','Banglore',0])),
    )    
    def get(self, request):
        from django.db.models import Q
        jobs=Job.objects.all().order_by("-postdate")
        c_radio=[]
        if 'exp' in request.GET:pass
        if 'sal' in request.GET:
            fl=request.GET['sal']
            c_radio.append(fl)
            if 'l' in fl:
                #return HttpResponse(fl[1:])
                q1=Q(basicpay__lte=fl[1:]) 
                self.filter_options[1][1][0][2]=1         
                jobs=jobs.filter(q1)
            elif 'b' in fl:
                jobs=jobs.filter(basicpay__range=fl.split('b'))
                self.filter_options[1][1][1][2]=1  
        if 'loc' in request.GET:
            c_radio.append(request.GET["loc"])
            jobs=jobs.filter(gmaplocation__district__icontains=request.GET["loc"])            
            #[2][1][1] ['ban', 'Banglore', 0]

        return render(request,'job/jobs.html',"jobs":jobs,'fopts':self.filter_options,'c_radio':c_radio)   

html

% for opts in fopts %          
        <div class="accordion-group">
          <div class="accordion-heading emp">
            <a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapse forloop.counter "><!--item 1-->
               opts.0.1 
            </a>
          </div>
          <div style="height: 0px;" id="collapse forloop.counter " class="accordion-body collapse">
            <div class="accordion-inner">                  
              % for opt in opts.1 %
              <label class="radio">
                <input type="radio" name=" opts.0.0 " value=" opt.0 "% ifequal opt.0.2 1 % checked% endifequal %>  opt.1  opt.0.2 
              </label>
              % endfor %
              <!--<label class="checkbox">
                <input type="checkbox" name="redefine"> Other
                <input type="text" name="other">
              </label>-->
            </div>
          </div>
        </div><!--/accordion-group-->
      % endfor %

更新:

这对我有用:

class RedefineChoices(forms.Form):
    CHOICES_EXP=(('l1','Less Than 1 year'),
            ('1b2','1 to 2 Years'),
            ('2b3','2 to 3 Years'),
            ('3b5','3 to 5 Years'),
            )
    CHOICES_SAL=(('l1000','Less Than $1000'),
            ('1000b3000','$1000 to $3000'),
            ('3000b5000','$3000 to $5000'),
            )
    CHOICES_LOC=(('che','Chennai'),
            ('ban','Banglore'),)
    exp = forms.ChoiceField(choices=CHOICES_EXP, widget=forms.Radioselect(),label='Jobs by Experience')
    sal = forms.ChoiceField(choices=CHOICES_SAL, widget=forms.RadioSelect(),label='Jobs by Salary')
    loc = forms.ChoiceField(choices=CHOICES_LOC, widget=forms.RadioSelect(),label='Jobs by Location')enter code here

【问题讨论】:

我在views.py中存储了一个变量,它定义了单选按钮是否被选中,即(['l1','Less Than 1 year',0],中的0,然后在&lt;input type="radio" name=" opts.0.0 " % ifequal opt.0.2 1 % checked% endifequal %这样的模板中使用它 【参考方案1】:

如果我理解正确,您想让用户根据您向他们展示的一些选项更改页面内容。我还没有看到 jQuery 必须在这里做什么。

要显示带有先前选中框的表单,您需要使用此数据实例化表单。与编辑视图相同。

例如,如果我有以下形式:

from django import forms

class MyForm(forms.Form):
    choice1 = forms.BooleanField(label='Choice A')
    choice2 = forms.BooleanField(label='Choice B')
    choice3 = forms.BooleanField(label='Choice C')

在视图中,我会像这样实例化它:

form = MyForm(initial='choice1': True

现在在模板中渲染时:

<form action="" method="post">
    form.as_table
    <input type='submit' value='Submit'>
</form>

它将显示choice1 已选中。

如您所见,不需要 jQuery。

还有一些事情:您不能在视图中存储以前选中的框。 View 只是一个函数,它的所有变量都是本地的。查找 python 变量范围以了解其含义。如果您想存储选择,您可以拥有一个模型来跟踪用户的选择,或者将其保存在会话中,如下所示:

if form.is_valid():
  request.session['user_choice']=form.cleaned_data

这样您就可以使用request.session['user_choice'] 作为初始数据来实例化表单。

This post 很好地解释了如何检查使用 jQuery 检查的内容。

无论如何,您可以更轻松地为每个选项拥有不同的视图,这样代码将更简单,更易于维护和测试。这样您就可以显示按钮而不是表单,无需发布、验证、实例化。

【讨论】:

这很棒。我一定要去试一试。我的意思是创建表格。感谢重播

以上是关于我想在页面加载时检查某些单选按钮组中的某些特定单选按钮?的主要内容,如果未能解决你的问题,请参考以下文章

更改单选按钮选中状态时如何从单选按钮组中的单选按钮获取文本

单击事件不在引导单选按钮组中触发

选择组中的下一个单选按钮

如何检查单选按钮是不是在 Android 的单选组中被选中?

根据选中的单选按钮展开和折叠手风琴

获取 Ajax 行为中的单选按钮选择值