2010-08-25 34 views
4

我有一個表單字段(一系列複選框),它是從數據庫中動態創建的,因此表單中可能不存在字段(如果表單中沒有匹配的值數據庫)。我有一些需要根據字段是否存在來執行的代碼,並且如果它存在,則拉入所選的值。雖然我似乎無法讓JavaScript承認這個字段存在。以下是我已經試過:確定表單上是否存在字段

function displayAction(){ 
    var f = document.adminForm; 
    var a = f.action; 

    if(f.prefix.value!="-") { 
     a = a + '&task=callExclusionDisplay&prefix=' + f.prefix.value; 
    } 
    else { 
     var exclusions = document.getElementById("exclusions"); 
     if (exclusions != null){ 
      alert("exclusions set"); 
      a = a + '&task=callExclusionCreate&prefix=' + f.prefix.value + '&exclusions=' + exclusions.join(); 
     } 
    } 
    alert('after if, action is ' + a); 
} 

的代碼永遠不會通過if語句檢查,看看是否排除不爲空,即使當我在看的網頁有一些名爲排除複選框(ID爲也設置爲排除)。問題是否爲!= null,因爲它是一組複選框,而不是單個表單元素?我怎樣才能使這個工作?如果我跳過對null的測試,那麼如果數據庫沒有返回任何匹配值,代碼將拋出有關排除未定義的錯誤。

回答

2

您正在使用document.getElementById,但表單元素有一個名稱。 嘗試f.elements.namedItem("exclusions")而不是exclusions != null

+0

謝謝,這工作。 – EmmyS 2010-08-25 17:53:56

0

是否所有的複選框都有相同的id ==排除? 如果是,那麼你必須先糾正。

在你這樣做之前,你是否嘗試檢查第一個複選框並查看if條件是否通過?

+0

ID必須始終是唯一的,如果沒有,則會選擇與該ID匹配的DOM中的第一個元素。這就是爲什麼我問你嘗試選擇第一個複選框來查看條件是否通過。 你可以試試@lekensteyn的建議,雖然不確定。 – Rahul 2010-08-25 17:32:55

1

同一頁面中的多個元素不能共享id屬性(即id必須是唯一的或未設置的)。同樣,儘管一些(舊的)瀏覽器錯誤地收集了名稱與正在查找的ID匹配的元素,但這是無效的,並且不能跨瀏覽器工作。

如果你想得到一組元素,你可以給它們所有相同的name屬性,並使用document.getElementsByName來獲得組。請注意,結果將是一個NodeList,它有點像數組,因爲它可以迭代。

+0

他們都有相同的名稱,我試過getElementsByName,它不起作用。沒有錯誤,它只是不評估爲真,所以if裏面的代碼永遠不會運行。 – EmmyS 2010-08-25 17:36:24

+0

@EmmyS如果你alert(document.getElementsByName('exclusions'))',結果是什麼? – 2010-08-25 17:37:08

+0

@EmmyS你需要從你的頁面中刪除任何重複的ID。確保所有具有指定ID的元素都不重複。即使它是同一種元素。 – 7wp 2010-08-25 17:42:15

0

如果你有多個ID爲「排除」的元素,它將搞砸getElementById的功能。我會從所有元素中刪除重複的「排除」ID,並使用getElementByName()來代替,並將您的複選框組命名爲「= exclusions」。

編輯: 但是,使用jQuery有一個更簡單的方法,它給你一些跨瀏覽器兼容性保證。要做到同樣的事情jQuery做到這一點:

var checkBoxesExist = $('[name=exclusions]').count() > 0; 

或者,如果你給你的元素獨特的ID,那麼你可以這樣做:

var checkbox1exists = $('#checkBox1').count() > 0; 
+0

試過了;沒有工作。 – EmmyS 2010-08-25 17:34:37

+0

@EmmyS Check在瀏覽器中查看您網頁的來源。對於出現多次的任何元素,是否有任何ID? – 7wp 2010-08-25 17:49:36

0

每個元素都必須有一個唯一的ID。

然後,您可以檢查就像這樣:

if (document.getElementById('exclusions1')) { 
    //field exists 
} 

或者,如果你通過一羣人的需要循環:

for (x=0; x<10; x++) { 
    if (document.getElementById('exclusions' + x)) { 
     //field X exists 
    } 
} 
相關問題