[英]Calling JS function in another function
我正在嘗試在另一個函數中調用一個函數,但是它不起作用。
PS我是JS的初學者
<script type="text/javascript">
<!--
// Form validation code will come here.
function validate() {
madatorychk(name);
//This functions makes sure that madatory fields are filled
function madatorychk(fieldid) {
var node = document.myForm.fieldid;
if (node.value == "") {
alert("This field cannot be left empty");
document.myForm.fieldid.focus();
return false;
}
}
}
//-->
</script>
<form method="get" onsubmit="return(validate());" name="myForm">
<label>Name: <input type="text" id="name"></label> </form>
</form>
您需要使用括號符號來訪問具有變量名稱的對象屬性。
因此, document.myForm.fieldid
(它試圖采用名稱實際上為fieldid
的表單元素)是不正確的,應該為document.myForm[fieldid]
:
function validate() {
return madatorychk('name');
//This functions makes sure that madatory fields are filled
function madatorychk(fieldid) {
var node = document.myForm[fieldid];
if (node.value == "") {
alert("This field cannot be left empty");
document.myForm[fieldid].focus();
return false;
}
}
}
為此,還要確保已命名表單元素:
Name: <input type="text" name="name" />
最后,非常重要的一點是您需要返回madatorychk
結果:
return madatorychk('name');
還有一件事。 您可能不希望不僅允許空白,而且不允許只包含空格的用戶名,所以在驗證之前修剪輸入:
if (node.value.trim() == "") {
alert("This field cannot be left empty");
document.myForm[fieldid].focus();
return false;
}
演示: http : //jsfiddle.net/747twprf/
您有一些錯誤:
name
(什么都沒有)而不是"name"
"fieldid"
的屬性,而不是名稱為fieldid
這是一個固定的代碼:
function validate() {
return madatorychk("name"); // note the return and the "name"
function madatorychk (fieldid) {
var node = document.myForm[fieldid]; // note the [fieldid]
if (node.value == "" ) {
alert("This field cannot be left empty");
document.myForm[fieldid].focus() ;
return false;
}
}
}
將函數聲明置於validate函數之外。
//This functions makes sure that madatory fields are filled
function madatorychk (fieldid) {
var node = document.myForm.fieldid;
if (node.value == "" ) {
alert("This field cannot be left empty");
document.myForm.fieldid.focus() ;
return false;
}
function validate(){
madatorychk(name);
}
好吧,以下對我有用:
<script>
// Form validation code will come here.
function validate()
{
madatorychk(name);
//This functions makes sure that madatory fields are filled
function madatorychk (fieldid) {
var node = document.querySelector('#name');
if (node.value == "" ) {
alert("This field cannot be left empty");
node.focus();
return false;
}
}
}
</script>
<form method="get" name="myForm" onsubmit="return validate();">
<label>Name: <input type="text" id="name"></label> </form>
</form>
我更改了onsubmit
屬性的值, document.myForm.fieldid
不是有效的元素路徑。
這里的例子。
在JavaScript 1.2之前,僅在頂級全局代碼中允許使用函數定義,但是JavaScript 1.2允許將函數定義也嵌套在其他函數中。
仍然有一個限制,即函數定義不能出現在循環或條件中。 這些對函數定義的限制僅適用於帶有函數語句的函數聲明。
但是,執行此操作的最佳方法仍然是分別定義函數,然后在第一個函數內部調用它 ,因為第二個函數非常方便,可以在其他地方使用。 也可以使用“ id”來識別形式,而不要使用名稱來識別形式 。 並且將節點本身作為參數傳遞將幫助您對任何形式的任何節點使用相同的函數 :
//This functions makes sure that mandatory fields are filled
function mandatoryChk(node) {
if (node.value == "" ) {
alert("This field cannot be left empty");
node.focus();
return false;
}
else
return true;
}
function validate() {
var Name = document.getElementById("myForm").elements['name'];
return mandatoryChk(Name);
}
並使用以下HTML:
<form method="get" onsubmit="validate();" id="myForm">
<label>Name: <input type="text" id="name" name="name"></label>
<input type='submit' value='Submit'/>
</form>
所做更改的列表:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.