• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:JQueryのclick(fnc)で指定された関数中のthis)

JQueryのclick(fnc)で指定された関数中のthis

このQ&Aのポイント
  • JQueryのclick(fnc)で関数中のthisの扱いについてお尋ねします。下記コードでは仮に2つのクラスをモデルとコントローラとして、コントローラからモデルの関数を呼び出しています。
  • value="HTML Tag"のボタンは期待したとおりに'chicken crows.'を表示しますが、value="JQuery"のボタンはcrow()中のthis.modelがundifinedになってしまいます。
  • 後者では$.fn.controllers.chickenController.crowをinputタグにコピーしてそれを実行しているのではないかと思います。そのためかthisはHTML Inputを指します。thisを使用する以外にモデルのcrow()を実行する方法はありませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • atse
  • ベストアンサー率83% (36/43)
回答No.1

value="HTML Tag"のボタンとモデルは違えど同じ動作をしたいのならば $('#b').click($.fn.controllers.chickenController.crow); ではなくて、 $('#b').click(function(){$.fn.controllers.chickenController.crow();}); とするのでは。 以前のままだと質問者さんの認識通り、 元の関数とは別物として#bのclickにコピーされたものが代入されるかと思います。

yu090jp
質問者

お礼

ありがとうございます。ご指摘のとおり無名関数を使用したら動作しました。助かりました。 $(#b).click(fnc)で指定した場合、下記のようなことが行われていると解釈しましたが、正しいでしょうか? ○動作した場合、HTMLInput.onclick = function(){return function(){$.fn.controllers.chickenController.crow();}} ×動作しない場合、HTMLInput.onclick = function(){return $.fn.controllers.chickenController.crow; } だとすればonclick='alert(this);'はHTMLInput.onclick = function(){return alert(this);} であり、'object HTMLInputelement'を表示するのも筋が通っています。

その他の回答 (1)

  • atse
  • ベストアンサー率83% (36/43)
回答No.2

> $(#b).click(fnc)で指定した場合、下記のようなことが行われていると解釈しましたが、正しいでしょうか? > ○動作した場合、HTMLInput.onclick = function(){return function(){$.fn.controllers.chickenController.crow();}} > ×動作しない場合、HTMLInput.onclick = function(){return $.fn.controllers.chickenController.crow; } それだとonclickによってfunctionがreturnされるだけなので、 そのように書くとしたら、 HTMLInput.onclick = (function(){return function(){$.fn.controllers.chickenController.crow();};})(); HTMLInput.onclick = (function(){return $.fn.controllers.chickenController.crow;})(); みたいな感じなので、よって、 動作○ HTMLInput.onclick = function(){$.fn.controllers.chickenController.crow();}; 動作× HTMLInput.onclick = $.fn.controllers.chickenController.crow; といった記述表現の違いになります。 でも言いたいことは伝わってきたので、仰っていることで解釈は合っていると思いますよ。

yu090jp
質問者

お礼

なるほど、ありがとうございます。 onclick="var foo = 'bar';" と onclick="function(){alert('bar');}" はDom上で関数であるかどうかによって分岐されないだろうと思ってfunctionでくるんでしまいました。 例えば下記のようなことがわざわざDomのロード中に行われることはないと思ったので。 if(typeof(dosth) == 'function'){ HtmlInput.onclick = dosth; }else{ HtmlInput.onclick = function(){dosth}; } 掲題の件自体は解決したので。終了とさせて頂きます。 ありがとうございました。大変助かりました。

関連するQ&A