2009-01-13 61 views
0

我創建了一個javascript函數,允許我驗證一個字段或另一個字段是否已填充(稱爲,足夠令人震驚,oneortheother)。從本質上講,它檢查是否都填充,或兩者都會拋出錯誤。驗證其中一個或另一個

要驗證的字段之一是input type="file"字段。我在現場文件下面顯示現有文件,以便用戶可以看到它是否是他們想要的文件。

有沒有什麼辦法可以通過oneortheother仍然驗證沒有input type="file"的值?任何類型的javascript欺騙?

在這一點上,我已經很有智慧,今天晚些時候有一個演示需要這個功能,所以任何幫助都將不勝感激。

編輯:

按照要求,這裏有一些例子:

<label for="pdf">Upload PDF: 
<span class="fieldnote">Files of type .pdf</span> 
</label> 
<input type="file" name="pdf" id="pdf" class="external_form_field oneortheother_url" value="/downloads/white_papers/HigherOrderPerl.pdf" /> 
<label>Existing file:</label><span class="preview"><a href="/downloads/white_papers/HigherOrderPerl.pdf" target="_blank">HigherOrderPerl.pdf</a></span> 
<label for="url">Link to asset:</label> 
<input type="text" name="url" id="url" class="external_form_field oneortheother_pdf" value="" size="25" /> 

注意,類oneortheother_urloneortheother_pdf應用。這允許驗證例程知道要比較哪個字段。比較是:

if (fObj.value && fObj2.value) { } 

if (!fObj.value && !fObj2.value) { } 
+0

你能發表一個例子嗎?你的描述不夠清楚。 – 2009-01-13 15:22:43

+0

我不明白這個問題。 – 2009-01-13 15:28:12

+0

crescentfresh - 實質上,我想找到某種方法使現有文件條目「覆蓋」輸入類型=「文件」,以使其他條目仍然有效。 – 2009-01-13 15:31:02

回答

1

我不知道你的驗證功能是如何工作的,但好像你可以添加保存上傳的預覽文件或網址隱藏輸入文件輸入中的值。然後,您可以將url輸入與隱藏輸入進行比較。

但似乎你可能只需要編寫一個自定義驗證函數。

0

我不確定我完全理解你的問題,因爲我不清楚。

你要檢查:

if (fObj.value && fObj2.value) {} 

if (!fObj.value && !fObj2.value) {} 

那麼,爲什麼不也添加此...

if (fObj.value && !fObj2.value) {} 

if (!fObj.value && fObj2.value) {} 
0

如何在每個選項旁邊添加單選按鈕,並允許所選單選按鈕確定使用哪個選項?

4

我很遺憾我無法理解的實際問題,但這裏有一個側邊欄提示:

XOR運算符可以派上用場了(雖然晦澀難懂)的情況下,像這樣:

if (fObj.value^fObj2.value) { 
    // Only one value is set, we're good 
} else { 
    // Both of them are set or neither of them are set 
} 
0

我我不確定你想要在這裏做什麼,但你可以添加一個隱藏的表單域,然後將一個函數附加到文件輸入和URL輸入事件中,這會將隱藏字段設置爲該值。

基本上我甚至不確定你現在採用的方法是否合適 - 例如,Firefox 3不允許你直接編輯文件字段的內容,並且據我所知可以給你沒有辦法「解除」一個值。因此,一旦選擇了一個文件,「pdf」輸入將總是非空,它與你設置的約束(據我瞭解)意味着「url」輸入有效永久禁用。這是更糟的,因爲你給文件輸入一個初始值,以便它永遠不會是空/空字符串。

您可能需要退後一步,仔細想想您想要達到的效果以及替代技術是否會更好。例如,一個單選按鈕可在文件上傳框或URL資源之間進行選擇,該資源會根據需要禁用和啓用字段。

此外,這裏的大多數人並不完全理解你所要求的,即使在編輯之後,這也表明它有一些不太直觀的含義,這意味着那些需要維護它的人未來的代碼可能會經歷類似的事情。同樣,重構設計可能是有序的,或者可能只是一堆描述性評論。