-1

ユーザーがボタンをクリックしたときに JS 関数を呼び出そうとしています。しかし、onclick イベントは発生していません。開発者ツールに次のエラーが表示されます。

実行エラー:

 function (/*Event*/ e){
        // summary:
        //      Handler when the user activates the button portion.
        if(this._onClick(e) === false){ // returning nothing is same as true
            e.preventDefault(); // needed for checkbox
        }else if(this.type == "submit" && !this.focusNode.form){ // see if a nonform widget needs to be signalled
            for(var node=this.domNode; node.parentNode/*#5935*/; node=node.parentNode){
                var widget=dijit.byNode(node);
                if(widget && typeof widget._onSubmit == "function"){
                    widget._onSubmit(e);
                    break;
                }
            }
        }
    } 
ReferenceError
arguments: Array[1]
get message: function () { [native code] }
get stack: function () { [native code] }
set message: function () { [native code] }
set stack: function () { [native code] }
type: "not_defined"
__proto__: Error

これが私のコードです:

HTML

<td>
<button dojoType = "xwt.widget.form.TextButton" id = "pingButton" baseClass = "defaultButton" onclick = "onPing();">Ping
  </button>
   </td>

JS:

onPing : function() {
        alert('works');
    }

何をすべきかについて何か提案はありますか?

4

2 に答える 2

2

むしろ対決のスレッドを続ける代わりに、OP と他のユーザーの両方に、彼が問題を抱えている理由を説明します。

問題 1: OP がすべての関連コードを投稿していない。OPは明らかにOOPとSOの両方にとって新しいものであり、彼は少ないほど多いと仮定するという致命的な誤りを犯しました。コロン構文onPingに従って、オブジェクトの一部である関数があることがわかります。:彼がすべてのコードを投稿するとしたら、彼の JavaScript は次のようになります。

var myObject = {
    onPing: function() {
        alert("works");
    }
};

ここで、彼のオブジェクトの名前がわからないことに注意してください。「ここにあなたのオブジェクト名」myObjectを暗示するために名前を使用しました。

問題 2:ボタンとインラインで定義されている onclick 関数があります。これは良い習慣ではなく、バグにつながる可能性があります...特に、非常に多くの切り取りと貼り付けのjavascriptスニペットがクロージャー内に記述されている場合:

(function() {
    /* 
    This is an example of closure.  
    Any variables/objects/functions defined in here are not accessible to the outside world 
    */
})();

問題 3:typeコードは値を持つ属性に依存しているように見えますsubmit。したがって、ボタンにはその属性を設定する必要があります。

<button type = "submit" dojoType = "xwt.widget.form.TextButton" id = "pingButton" baseClass = "defaultButton" onclick = "onPing();">Ping</button>

と呼ばれるグローバル関数を宣言するのが手っ取り早い解決策かもしれませんがonPing、これは他のライブラリに問題を引き起こし、コードの保守をより困難にする可能性があり、単なる昔ながらの悪い習慣であり、決して推奨されるべきではありません。それでは、次のことを行うより良いソリューションを探ってみましょう。

  • 完全な作業コードを表示
  • クロージャ内でオブジェクトを定義する
  • インラインではなく、コードを介してイベントをバインドする

ここに行きます...

<button type="submit" dojoType="xwt.widget.form.TextButton" id="pingButton" baseClass="defaultButton">Ping</button>

<script>
(function() {
    var myObject = {
        onPing: function() {
            alert("works");
        }
    };

    document.getElementById('pingButton').onclick = myObject.onPing;
}());
</script>

そして、非常に便利にするために、jsfiddleを含めます。

于 2012-10-19T02:09:28.287 に答える
-1

これは動作します

function onPing() {
        alert("this");
    }

ボタンはそのままにしておくことができます。

<button dojoType = "xwt.widget.form.TextButton" id = "pingButton" baseClass = "defaultButton" onclick = "onPing();">Ping</button>
于 2012-10-18T21:13:26.393 に答える