在另一个函数中调用JS函数

时间:2015-05-24 07:28:08

标签: javascript

我试图在另一个函数中调用一个函数,但它不起作用。

P.S我是JS的初学者

function my_autoload($class_name) {
    if (is_file('CLASSES/' . $class_name . '.php')) {
        require_once 'CLASSES/' . $class_name . '.php';
    } else {
        $matching_files = glob('ADMIN/TPL/*/' . $class_name . '.php');
        if (count($matching_files) === 1) {
            require_once $matching_files[0];
        } else if (count($matching_files) === 0) {
            trigger_error('Could not find class ' . $class_name . '!', E_USER_ERROR);
        } else {
            trigger_error('More than one possible match found for class ' . $class_name . '!', E_USER_ERROR);
        }
    }
}
spl_autoload_register("my_autoload");

5 个答案:

答案 0 :(得分:3)

您需要使用bracket notation来访问具有变量名称的对象属性。

所以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/

答案 1 :(得分:2)

您有一些错误:

  • 您通过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;
        }
     }
}

答案 2 :(得分:0)

将函数声明放在validate函数之外。

Main
{

  Start capturing.

  Some operations, functions ect.

  Stop capturing.

}

答案 3 :(得分:0)

嗯,以下内容对我有用:

<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不是有效的元素路径。

示例here

答案 4 :(得分:0)

  

在JavaScript 1.2之前,只允许使用函数定义   顶级全局代码,但JavaScript 1.2允许函数定义   也可以嵌套在其他函数中。

     

仍有一个限制,可能不会出现功能定义   在循环或条件中。这些功能限制   定义仅适用于具有该函数的函数声明   言。

但仍然最好的方法是单独定义函数并在第一个函数中调用它,因为第二个函数是一个非常方便的函数,可以在其他地方使用。同时使用&#39; id&#39;识别表单而不是使用名称来执行此操作。并且将节点本身作为参数传递将帮助您对任何形式的任何节点使用相同的函数

//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>

完成的更改列表:

  • 更改了&#39;名称&#39;形式的属性为&#39; id&#39;财产和添加名称&#39;属性到文本输入。使用id识别表单和名称以识别输入。
  • 包含一个提交按钮,没有该按钮,大多数浏览器都不会提交表单。
  • 更改了&#39; onsubmit&#39;中的函数调用。表格中的事件。 &#39; onsubmit&#39;但不建议使用HTML表单中的事件。
  • 为了“代码重用”而分离的mandatoryChk()和validate()函数。
  • 将mandatorychk()重命名为mandatoryChk()以符合编码约定(请参阅:Coding Conventions
  • 已在validate函数中定义了输入节点,然后将此节点传递给mandatoryChk()函数。这使mandatoryChk()能够对任何表单的任何文本输入执行检查。
  • 为True案例添加了替代返回值,mandatoryChk()。