2

以下は、1つのボタンで複数のJavaスクリプトに使用したコードです。しかし、2番目のものを無効にすると、誰もが機能します。私に知らせてください:コードを変更して正常に動作させるにはどうすればよいですか?

function invoke(but)  
{  
if(but==0)   
    {  
        function move(){  
        document.getElementById('tgt1').value = 
        document.getElementById('Allocation').value;  
        document.getElementById('Allocation').value="";  
        document.getElementById("Send").disabled=true;  

    }document.myform.action="Alloc_Insert.do";  
    }  
           else if(but==1)  
   {  
       document.myform.action="";  
   }  

else if(but==2){ document.myform.action="WL_Verif.do";}  
else if(but==3){ document.myform.action="Add_Query.do";}  
document.myform.submit();  
        } 

そして、htmlは以下の通りです:

<input type="Submit" value="Allocate" id="Send" name="submit" onClick="invoke(0);move();"/><br/>  
4

4 に答える 4

1

'move'関数は'invoke'関数の外部で宣言されていないことに注意してください。

それで;

それらを自己呼び出し関数でラップします。

onclick="(function(){ invoke(0);move(); })();"

またはイベントハンドラーをアタッチします(通常は推奨されます)

div.attachEventListener('click', function () { ... }); // DOM 3
div.attachEvent('click', function () { ... }); // IE
于 2012-08-27T08:56:32.990 に答える
1

あなたの関数は奇妙な方法で宣言されています。あなたはmove 内部を invoke定義していますが、私はあなたが望んでいないと思います。2つの関数が必要な場合は、次のようにのmove に配置します。invoke

function move(){
  document.getElementById('tgt1').value =
    document.getElementById('Allocation').value;
  document.getElementById('Allocation').value="";
  document.getElementById("Send").disabled=true;
}

function invoke(but)
{
  if(but==0)
  {
    move();
    document.myform.action="Alloc_Insert.do";
  }
  else if(but==1)
  {
    document.myform.action="";
  }
  else if(but==2){ document.myform.action="WL_Verif.do";}
  else if(but==3){ document.myform.action="Add_Query.do";}
  document.myform.submit();
}

注:通常onClick、HTMLで使用することはお勧めできません。JavaScriptに使用することをお勧めします。

于 2012-08-27T09:01:17.417 に答える
1

ボタンの名前を「送信」以外の名前に変更します


何が起こるかを説明するには:

名前属性「送信」をボタン(またはその他のフォーム要素)に割り当てると、この要素には次の方法でアクセスできます。

document.myform.submit

ただし、フォームの組み込みメソッドもあります。 submit()、を使用してアクセスすることもできます。

document.myform.submit

電話をかけると今何が起こるか document.myform.submit()

コードを少し変えて書くと、問題が発生します。

document.myform['submit']()

組み込みのメソッドにアクセスする代わりに、コードは最初にform-elementをポイントし、次にメソッドの実行を試みます。ただし、form-elementはメソッドではなく、すべてエラーになり、残りのスクリプト(move()の呼び出しを含む)は実行されません。

これは「リセット」と同じです。フォーム要素の名前として、フォーム要素の組み込みプロパティ/メソッドの名前を使用しないでください。

于 2012-08-27T09:03:15.560 に答える
1

問題は関数の範囲だと思いmove()ます。moveinvokeの外部で定義してみてください。

function invoke (but) {  
    if(but==0) {
        document.myform.action="Alloc_Insert.do";
        // I don't know if you meant to call move() here or not
    }
    else if (but==2) { document.myform.action="WL_Verif.do"; } 
    else if (but==3) { document.myform.action="Add_Query.do"; }

    document.myform.submit();  
}

function move(){  
    document.getElementById('tgt1').value = 
    document.getElementById('Allocation').value;  
    document.getElementById('Allocation').value="";  
    document.getElementById("Send").disabled=true;
}

また、コードを適切にフォーマットすると、コードの読みやすさが不思議になります。

注:Firefoxは、内部で定義されonClick="invoke(0);move();"ている場合でも、実行するのに非常に満足しているようです。ただし、Chromeは見つからないため、実行されません。したがって、スクリプトは複数のブラウザでもテストしてください。moveinvokemove

于 2012-08-27T09:04:08.977 に答える