1

数値をインクリメントするグローバル変数がいくつかあります。

var i = 0;  
var num = (i-1)+2;  
var i = num; 

次に、数値をチェックしてHTMLを表示する関数があります。

function showChild(){

if(num===1){
    document.getElementById("childFirst00").style.display = "block";
    document.getElementById("childLast00").style.display = "block";
    document.getElementById("deleteChild00").style.display = "block";
    num++;
}else if(num===2){
    document.getElementById("childFirst01").style.display = "block";
    document.getElementById("childLast01").style.display = "block";
    document.getElementById("deleteChild01").style.display = "block";
    num++;
}else if(num===3){
    document.getElementById("childFirst02").style.display = "block";
    document.getElementById("childLast02").style.display = "block";
    document.getElementById("deleteChild02").style.display = "block";
    num++;  
}else if(num===4){
    alert("Please Contact The Rectory If You Need To Add More Children");   
}
}

これはすべて正しく機能します。
ただし、deleteChild00次の関数を呼び出すボタンをクリックするとnot enough arguments、Firebugでエラーが発生します。

function removeChild(){

if(num===2){
    document.getElementById("childFirst00").style.display = "none";
    document.getElementById("childLast00").style.display = "none";
    document.getElementById("deleteChild00").style.display = "none";
    num--;
}else if(num===3){
    document.getElementById("childFirst01").style.display = "none";
    document.getElementById("childLast01").style.display = "none";
    document.getElementById("deleteChild01").style.display = "none";
    num--;
}else if(num===4){
    document.getElementById("childFirst02").style.display = "none";
    document.getElementById("childLast02").style.display = "none";
    document.getElementById("deleteChild02").style.display = "none";
    num--;  
}   
}

これは、removeChild()関数を呼び出す入力HTMLです。

<input type="button" id="deleteChildButton" value="Remove Child" onClick="removeChild()"/>

removeChild()関数で「引数が足りません」エラーの原因は何ですか?

4

2 に答える 2

1

removeChild()標準のDOMnodemoethodであり、引数が必要であり、ノードから呼び出す必要があります。これを現在の方法で使用しようとすると、ブラウザーごとに異なるエラーが返されます。Firefoxは「引数が足りません」という例外を返しますが、Chromeは「キャッチされないエラー:NOT_FOUND_ERR:DOM例外8」を返します。

関数の名前を別の名前に変更します。

// Rename...
function removeChild(){
// to...
function someOtherRemoveChild(){

代わりに、マークアップでそれを呼び出します。

<input type="button" id="deleteChildButton" value="Remove Child" onClick="someOtherRemoveChild()"/>

または、スコープで定義removeChild()したので、を介して呼び出すことができるはずですが、それが機能することを保証することはできません。また、DOMメソッドを再定義するのはおかしいので、実際にはお勧めしません。windowwindow.removeChild()

<input type="button" id="deleteChildButton" value="Remove Child" onClick="window.removeChild()"/>
于 2012-07-09T02:38:02.467 に答える
1

これは、removeChild()やcreateElement()などの定義済みの関数名を使用しているためです。

以前に使用された可能性があると思われるこれらの既知の関数は避けてください。そしてそれをdoSomthing()のような珍しいものに変更してみてください。

于 2013-02-12T17:34:37.923 に答える