亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 JavaScript 中訪問更新表單的元素

在 JavaScript 中訪問更新表單的元素

慕容708150 2021-11-04 15:18:52
我有一個用于更新找到的項目的表格。該表單通過視圖擴展了 Django 的 UpdateView。更新丟失物品和更新找到物品的表單使用相同的模板,但具有不同的視圖和表單。它們共享相同的模板,因為大多數字段都相同。我正在嘗試為表單添加一些自定義表單驗證,以特別更新找到的項目。此驗證特定于找到的物品,不適用于丟失的物品。我在一個干凈的函數中進行了驗證,該函數FoundUpdateForm檢查是否滿足了所需的條件,如果不滿足條件,則引發 ValidationError。即使這里有驗證,我也想將它添加到 JavaScript 文件中。我曾嘗試在與表單上的元素相關聯的 JavaScript 文件中創建變量,但沒有成功。我試過使用var staff_type = document.getElementById('staff_type'),var staff_type = document.getElementById('FoundUpdateForm').elements.namedItem('staff_type')以及其他一些變體。我正在處理的主要問題是如何在沒有 ID 的情況下獲取表單。我已經研究過在 forms.py 中為表單分配一個 ID,但從我的發現來看,至少它似乎不能以這種方式完成。我想盡可能避免添加到模板中,因為如前所述,該模板被多個表單使用。此外,由于表單擴展了 UpdateView 模板,因此該模板能夠{{ form.as_p }}使用 p 標簽來呈現表單的字段。因為元素以這種方式呈現到頁面上,Django 為每個元素分配了自己的 ID,但表單本身并沒有分配一個 ID。表格.py:class FoundUpdateForm(ModelForm):    Found._meta.get_field('staff_type').formfield(widget=forms.RadioSelect())    def clean(self):        cleaned_data = super(FoundUpdateForm, self).clean()        staff_type = cleaned_data.get('staff_type')        witness = cleaned_data.get('witness')        res_type = cleaned_data.get('res_type')        name_of_the_individual_claiming_item = cleaned_data.get('name_of_the_individual_claiming_item')        phone_number = cleaned_data.get('phone_number')        if not staff_type:            raise forms.ValidationError("Please fill out Type of Employee Resolving Item.")        if staff_type == 'student' and not witness:            raise forms.ValidationError("Student staff resolving lost items are required to have a witness.")        if res_type.name == 'Picked up':            if not name_of_the_individual_claiming_item:                raise forms.ValidationError("If person is picking up item, the individual's name is required.")            if not phone_number:                raise forms.ValidationError("If person is picking up item, the individual's phone number is required.")            if not witness:                raise forms.ValidationError("If person is picking up item, a witness is required.")        }
查看完整描述

1 回答

?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

將表單包裹在 a 中,<div>并為該 div 指定一個類,例如<div class="MySpecialForm">。然后,您可以通過引用具有該特定類的 div 中的表單來找到(django 生成的)表單(如果您想要防彈,請檢查它是否唯一)。通常,將某些內容包裝在 div 中對其顯示沒有影響,除非 div 類對于某些內容(例如 Bootstrap)而言是特殊的。$('div.MySpecialForm form')(或者更接近的東西,我不會經常使用 JQuery 選擇器來獲得關于它們的知識?。?/p>

除非頁面中可能有 >1 個表單,否則您不需要這個,但是如果您嘗試編寫盡可能通用的 JS,您確實應該考慮這種可能性。

您還應該考慮模板和子模板,使用定義相對于任何特定視圖和一些空塊(或顯示“編程錯誤,您忘記覆蓋塊 foobar”的塊)不變的部分的基本模板。子模板做

{% extends "wherever/whatever.html" %} {% block something %} stuff {% endblock something %} {% block something_else %} 等等...

這巧妙地將一個視圖的細節與特定類型視圖的泛型區分開來。


查看完整回答
反對 回復 2021-11-04
  • 1 回答
  • 0 關注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號