浏览器说没有引用函数

时间:2017-01-31 09:08:02

标签: javascript google-chrome firefox

我一直在讨厌这个问题。我不想通过PHP函数来创建cookie。 javascript函数在Jquery文档准备好的上面定义。 JQuery库几乎都加载了所有这些javascript函数。

<script type="text/javascript">
  $( document ).ready(function() {

    function superadmin()
    {
        document.cookie = "user=superadmin";
        window.location = "list.php";
    }

    function user()
    {
        document.cookie = "user=user";
        window.location = "list.php";
    }       
  });
</script>
<script type='text/javascript'>
  $( document ).ready(function() { 
    superadmin(); 
  });
</script>    

<div class="container">

4 个答案:

答案 0 :(得分:3)

函数声明的作用域是声明它们的函数。

superadmin在传递给ready()的匿名函数中定义,因此无法在该匿名函数之外调用。

首先,删除此内容:

<script type='text/javascript'>
  $( document ).ready(function() { 
    superadmin(); 
  });
</script>    

第二次,将调用superadmin(); 置于现有的就绪事件处理函数中。

答案 1 :(得分:0)

这是与javascript范围相关的问题。 jquery document.ready事件使用单独的范围,因此如果在那里创建变量,则无法从其他位置访问它。

对此的解决方案是创建一个命名空间,在这种情况下,您可以在其中附加变量。上述问题可以通过这种方式解决:

<script type="text/javascript">

var Namespace = {};

$( document ).ready(function() {

  Namespace.superadmin = function()
  {
    document.cookie = "user=superadmin";
    window.location = "list.php";
  }

  Namespace.user = function()
  {
    document.cookie = "user=user";
    window.location = "list.php";
  }       
});
</script>
<script type='text/javascript'>
$( document ).ready(function() { 
  Namespace.superadmin(); 
});
</script>    

<div class="container">

编辑:

针对上述具体情况,昆汀发布的解决方案更好。这是一个可接受的解决方案,假设您无法避免拥有两个单独的侦听器(可能在不同的文件中)。您当然也可以使用可从两个范围访问的范围,在这种情况下是范围。

答案 2 :(得分:0)

您的代码不在同一范围内,请尝试以下操作:

superadmin = function()

而不是

function superadmin()

有关详细信息,请参阅http://www.w3schools.com/js/js_scope.asp

答案 3 :(得分:-1)

我通过这种方式在javascript中做过烹饪

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
}

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

function checkCookie() {
    var user = getCookie("username");
    if (user != "") {
        alert("Welcome again " + user);
    } else {
        user = prompt("Please enter your name:", "");
        if (user != "" && user != null) {
            setCookie("username", user, 365);
        }
    }
}

function deleteCookie(name) {
    document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

 setCookie("userid",14);
 setCookie("username","rajesh");

var userid = getCookie("userid");
var username = getCookie("username");