2016-11-16 6 views
0

Ich versuche, eine Funktion aufzurufen, die ich innerhalb eines Objektblocks definiert habe, aber nur, wenn ein Feldwert ausgewählt wird.Javascript "Uncaught TypeError: Objekt ist keine Funktion"

var student = { 
 
    role: function() { 
 
    var studRole = document.getElementById("student"); 
 
    var roleStud = studRole.options[studRole.selectedIndex].value; 
 
    switch (roleStud) { 
 
     case 'Admin': 
 
     alert("Welcome Admin"); 
 
     break; 
 
     default: 
 
    } 
 
    } 
 
}
<form> 
 
    <select id="countries" onchange="test()"> 
 
    <option value="France">France</option> 
 
    <option value="Nigeria">Nigeria</option> 
 
    </select> 
 
    <br/>Student Role: 
 
    <select id="student" onchange="student.role()"> 
 
    <option value="user">User</option> 
 
    <option value="Admin">Admin</option> 
 
    </select> 
 
</form>

Fiddle Demo

+0

In welcher Zeile tritt dieser Fehler auf? Wenn Sie Ihren Code im Debugger verfolgen, welchen Wert hat 'studRole'? –

+0

Wäre höchstwahrscheinlich ein Problem mit dem Umfang des Schülerobjekts, wo haben Sie das definiert? –

+5

Sie haben widersprüchliche IDs mit dem HTML-Element namens 'student' und dem Objekt namens' student'. Beachten Sie, dass HTML-IDs auf das globale Objekt angewendet werden. –

Antwort

1

student Unter Berücksichtigung im window Umfang, können Sie sich darauf beziehen, wie in window.student.role()

var student = { 
 
      role: function() { 
 

 
       var studRole = document.getElementById("student"); 
 
       var roleStud = studRole.options[studRole.selectedIndex].value; 
 

 
       switch (roleStud) { 
 
        case 'Admin': 
 
         alert("Welcome Admin"); 
 
         break; 
 
        default: 
 
        } 
 
        } 
 
       }
<form> 
 
     <select id="countries" onchange="test()"> 
 
      <option value="France">France</option> 
 
      <option value="Nigeria" >Nigeria</option> 
 
     </select><br/> 
 
     Student Role: 
 
     <select id="student" onchange="window.student.role()"> 
 
      <option value="user">User</option> 
 
      <option value="Admin" >Admin</option> 
 
     </select> 
 
</form>

+0

Warum sollten Sie das tun? –

0

Sie müssen function anrufen mit object Sie es mit einem string

<form> 
     <select id="countries" onchange="test()"> 
      <option value="France">France</option> 
      <option value="Nigeria" >Nigeria</option> 
     </select><br/> 
     Student Role: 
     <select id="student" onchange="CheckRole()"> 
      <option value="user">User</option> 
      <option value="Admin" >Admin</option> 
     </select> 
</form> 
    <script> 
var student = { 
      role: function() { 

       var studRole = document.getElementById("student"); 
       var roleStud = studRole.options[studRole.selectedIndex].value; 

       switch (roleStud) { 
        case 'Admin': 
         alert("Welcome Admin"); 
         break; 
        default: 
        } 
        } 
} 
function CheckRole() { 
    student.role(); 
} 
0

Bitte definieren Sie Ihre Funktion first.You nennen sind ein „Test“ Funktion aufrufen, die nicht in Ihrem Skript definiert ist.

<!DOCTYPE html> 
<html> 
<head> 
<style> 
table, td, th { 
border: 1px solid black; 
} 

table { 
    border-collapse: collapse; 
    width: 100%; 
} 

th { 
height: 50px; 
} 
</style> 
</head> 
<body> 

<form> 
    <select id="countries" onchange="test()"> 
     <option value="France">France</option> 
     <option value="Nigeria" >Nigeria</option> 
    </select><br/> 
    Student Role: 
    <select id="student" onchange="window.student.role()"> 
     <option value="user">User</option> 
     <option value="Admin" >Admin</option> 
    </select> 
    </form> 
    <script> 

function test(){ 
var student = { 
      role: function() { 

      var studRole = document.getElementById("student"); 
      var roleStud = studRole.options[studRole.selectedIndex].value; 

      switch (roleStud) { 
       case 'Admin': 
        alert("Welcome Admin"); 
        break; 
       default: 
       } 
       } 
      } 
} 
</script> 
</body> 
</html> 
Verwandte Themen