簡體   English   中英

在另一個函數中調用JS函數

[英]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>

所做更改的列表:

  • 將表單的“名稱”屬性更改為“ id”屬性,並將“名稱”屬性添加到文本輸入中。 使用id識別表單,使用名稱識別輸入。
  • 包括一個提交按鈕,大多數瀏覽器不提交按鈕不提交表單。
  • 在窗體的“ onsubmit”事件中更改了函數調用。 但是不建議使用HTML表單中的“ onsubmit”事件。
  • 為了“代碼重用”,將強制Chk()和validate()函數分開。
  • 為了符合編碼約定,將更正的chk()重命名為constantChk()(請參閱: 編碼約定
  • 已經在validate函數中定義了輸入節點,然后將該節點傳遞給strictChk()函數。 這使強制性Chk()能夠對任何形式的任何文本輸入執行檢查。
  • 為True案例添加了替代返回值,強制Chk()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM