2013-04-05 94 views
1

我有一個需要驗證的一種形式,決定將不同於平常做一點,有主函數調用小功能,像這樣正確插入參數

function validate() { 
validate_this(*fieldId*); 
validate_that(*fieldId*); 
... 
} 

其中較小的功能,像這樣:

function validate_empty(formField) { 
if (formName.formField.value.length = 0;) { 
    //Do Stuff 
} 
} 

其中formField是表單中的字段ID。 然而這是在formName.formField.value.length

Uncaught TypeError: Cannot read property 'value' of undefined 

導致錯誤我怎樣才能得到這是通過而不是字符串或空解析的實際fieldId? jQuery不存在這個問題。

+0

'formName [formField]' – CBroe 2013-04-05 12:08:53

回答

1

我建議使用document.getElementById代替:

function validate_empty(formField) { 
    if (document.getElementById(formField).value.length == 0) { 
     //Do Stuff 
    } 
} 
+0

知道這將是一個簡單的修復,但並不認爲它會那麼簡單。感謝一堆! – Squiggles 2013-04-05 12:03:02

+0

分號在這裏是一個語法錯誤,就像賦值操作符一樣:賦值給一個只讀屬性是一個不可否認的問題 – 2013-04-05 12:05:25

+0

不錯,這兩個都是簡單的錯字創建這個問題,而不是實際的代碼儘管如此一切都很好 – Squiggles 2013-04-05 12:08:40

1

你的代碼看,JS是範圍掃描一個名爲formName變量,或任何形式的名稱實際上是...你應該指定的方式,它是一個DOM元素:document.forms[0]或類似的。

即使如此,你if將始終爲true,因爲你分配,不進行比較:

var foo = 0;//single = : assignment operator 
console.log(foo == '0');//true, loose comparison (type coerced) 
console.log(foo === '0');//false, strict comp: type && value 

從且不說,你驗證你的形式方法是高度懷疑。 ..你似乎在使用JS,就好像它是像C或其他語言一樣的語言。 JS恕我直言,最好用作事件驅動的函數式編程語言。
所以,即使這不是嚴格相關的自動取款機,請考慮調查JS的優勢...這是一個整潔的小語言,不應該受到這種虐待。

+0

因此,使用'formName.field.etc'的形式名稱是'formName'是一個不是? (儘管它有效) – Squiggles 2013-04-05 12:16:46

+0

@aprice:Nope:對於其中一個,你可以不經意地隱藏蒙板formName(變量),如果存在一些X瀏覽器問題,我一點也不會感到驚訝 – 2013-04-05 12:20:27

+0

我看,很高興知道。 個人不會這樣設置它,但它是一個大學作業,它表示驗證是沒有重複的代碼。必須承認我的C#本能跳入,這是結果 – Squiggles 2013-04-05 12:27:10