2

表格.py

class SearchFilterForm(Form):
    fromdate = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'dd/mm/yy','class':'datefield','readonly':'readonly'}))
    todate = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'dd/mm/yy','class':'datefield','readonly':'readonly'}))

javascript:

function comparedate(){
        var fromdate = document.getElementById("id_fromdate").value;
        var todate = document.getElementById("id_todate").value;
        if(fromdate<todate){
        {
        $("#error-warning").show();
        $("#error-warning").text("Please correct the To date");          
        return false;        
    }

 }

模板.html

<button type="submit" name="filter" onclick="comparedate()">Go <img src="/static/images/button-icon-ir-fwd.png" alt="" height="17" width="8"></button><div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div>

此代码用于验证起始日期和截止日期。验证正在进行,但在验证后表单再次提交。这用于搜索报告功能,因此如果输入的截止日期小于起始日期,则会显示错误消息并且去搜索,这不应该发生。

谁能告诉我会是什么问题

4

3 回答 3

2

对于这个问题我们有不同的解决方案,你可以试试

<button type="submit" name="filter" onclick="javascript:return comparedate();"> Go<img src="/static/images/button-icon-ir-fwd.png" alt="" height="17" width="8"></button><div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div>
于 2013-06-27T07:27:26.463 回答
0
document.getElementById("button_id").disabled = true

$("id_todate").change(function(){ 
    var fromdate = document.getElementById("id_fromdate").value;
    var todate = document.getElementById("id_todate").value;

    if (Date.parse(fromdate) > Date.parse(todate)) { 
        $("#error-warning").hide();
        document.getElementById("button_id").disabled=false;   
    }else{
        $("#error-warning").show();
        $("#error-warning").text("Please correct the To date"); 
    }
}

<button type="submit" name="filter" id="button_id" disabled>Go <img src="/static/images/button-icon-ir-fwd.png" alt="" height="17" width="8"></button>
<div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div>

修改的:

<html>
    <script type="text/javascript" src="jquery-1.10.1.min.js" ></script>
    <input type="date" id="id_fromdate" />
    <input type="date" id="id_todate" />
    <input type="submit" name="filter" id="button_id" disabled />
    <div id="error-warning" style="display:none" class="errorlist">Please correct the To date</div>
    <script type="text/javascript">
        $("input[type='date']").change(function(){ 
            var fromdate = document.getElementById("id_fromdate").value;
            var todate = document.getElementById("id_todate").value;

            if (Date.parse(fromdate) > Date.parse(todate)) { 
                //console.log(fromdate)
                //console.log(todate)
                    $("#error-warning").hide();
                    document.getElementById("button_id").disabled=false;   
            }else{
                //console.log(fromdate)
                //console.log(todate)
            document.getElementById("button_id").disabled=true;   
                    $("#error-warning").show();
                    $("#error-warning").text("Please correct the To date"); 
            }
        })
    </script>

于 2013-06-25T15:17:27.050 回答
0

你试过这个吗? https://docs.djangoproject.com/en/dev/ref/validators/

如果您想对多个字段进行验证,您可以在表单的 clean 方法中执行此操作,因此在您的搜索表单中,您将拥有:

class SearchFilterForm(Form):

    def clean(self):
        if self.fromdate < self.todate:
            raise ValidationError('Please correct the To date')
        return self.cleaned_data

那么在您看来,您将拥有:

if form.is_valid():
    ...

在您的模板中,您可以使用:

{{ form.non_field_errors }}

或者,您可以手动设置字段错误,而不是引发 ValidationError,如下所示:

self._errors['todate'] = 'Please correct this'

在模板中您可以使用:

{{form.todate.errors}}
于 2013-06-27T09:41:13.483 回答