2012-03-21 41 views
0

我無法理解Javascript的工作原理...我想傳遞一個表單名稱和提交按鈕名稱,以便該函數可以評估傳遞的值並啓用或禁用提交按鈕。將表單名稱和表單對象名稱傳遞給函數

它的工作原理是如果我明確使用名稱,但我希望它動態地工作。不幸的是,我只是不理解如何正確使用這些參數。

現在第一個文檔語句有效(使用表單名稱和按鈕名稱),爲什麼不使用第二個參數?我從警報中知道,表單名稱不正確,不能按原樣使用,但即使我明確指定表單名稱,但使用傳遞的按鈕名稱顯示正確,該表單也不起作用。

我知道這必須是JavaScript的101,但我碰到這一次又一次,只是沒有得到什麼。任何人願意向我解釋這一點?

<script type="text/javascript"> 
    function aTest(formName,objName,val){ 
     if (val<5){ 
     document.aForm.aBtn.disabled=false; 
     alert(formName+" - "+objName); 
      } 
     else { 
     document.formName.objName.disabled=true; 
      } 
    }//end function aTest(formName,objName) 
</script> 

<form name="aForm"> 
<input name="testFld" type="text" onBlur="aTest(this.form,'aBtn',this.value)"> 
<input name="aBtn" type="submit" value='submit'></form> 

謝謝您的關注!

回答

2

嘗試:

document[formName][objName].disabled = true; 

當需要通過一些表達式的值,而不是具有恆定的訪問對象的屬性,可以使用方括號運算符。評估括號內的表達式,然後將其值視爲要查找的屬性名稱。現在

,它很可能是明智的,以確保「窗體名稱」確實是一種形式的名稱:

if (document[formName] != null && document[formName][objName] != null) { 
    document[formName][objName].disabled = true; 
} 

或者更地道:

if (document[formName] && document[formName][objName]) { 
    document[formName][objName].disabled = true; 
} 
+0

謝謝!這是有道理的,巧合的,是有效的!剩下的唯一問題就是爲什麼表單名稱沒有通過。我以爲這個表單會拉取包含表單的名字? – jlisham 2012-03-21 15:39:12

+0

想出了最後一塊......改變了傳入的參數,以便它調用this.form.name而不是this.form。似乎工作。謝謝你的幫助尖尖的,我想我終於明白了! – jlisham 2012-03-21 16:49:06

相關問題