0

関数 asyncMsg は、フック開始ボタンをクリックするとすぐに呼び出されます。ユーザーがプレスミーボタンをクリックしたときにのみ電話をかけるように変更するにはどうすればよいですか。2 つのデータ項目をこのコールバックに渡す必要があります。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript">

function bindEvent(el, eventName, eventHandler) {
   if (el.addEventListener){
      el.addEventListener(eventName, eventHandler, false); 
   } else if (el.attachEvent){
      el.attachEvent('on'+eventName, eventHandler);
   }
}

function asyncMsg(data, fldid) {
   alert("asynchronous message with param1=" + data + " param2=" + fldid);
}

function dohooking() {
   var toinsert = "Duck";
   var fldid = "10";
   var btn = document.getElementById("hookee");
   bindEvent(btn, 'click', asyncMsg(toinsert, fldid));
}

</script>

<title></title>

</head>
<body>

<input type="button" id="sethooking" value="start hooking" onclick="dohooking();">
<br />

<input type="button" id="hookee" value="press me">
<br />

</body>
</html>

次のように関数を渡すとどうなるかがわかります。

bindEvent(btn, 'click', asyncMsg);

その後、非同期で呼び出されますが、2 つのパラメーターを渡すにはどうすればよいですか?

4

1 に答える 1

2

関数自体を関数に渡すのではなく、すぐに関数を呼び出します。これは、関数で「演算子」bindEventを使用すると関数が呼び出されるためです。()

代わりにこれが必要です:

bindEvent(btn, 'click', asyncMsg.bind(null, toinsert, fldid));

関数のメソッドは、指定されたコンテキスト (この場合) と指定されたパラメーターでbind()関数を実行する別の呼び出し可能オブジェクトを返します。null

古いブラウザーでも機能する別のオプションは、関数を呼び出す匿名関数を作成することです。

bindEvent(btn, 'click', function() {
    asyncMsg(toinsert, fldid);
});
于 2013-03-17T23:36:39.180 に答える