search phpbb-phpbb-FC2BLOG-Info-Edit Template-Post-Edit-Upload-LogOut
これらのメソッドに該当するコードは jQuery.js ver1.2.2 の 2205-2215 行です。2214 行だけが1.2.1とことなる箇所で新規追加行になります。バグフィックスと言うところでしょう。
2205: trigger: function( type, data, fn ) {
2206: return this.each(function(){
2207: jQuery.event.trigger( type, data, this, true, fn );
2208: });
2209: },
2210:
2211: triggerHandler: function( type, data, fn ) {
2212: if ( this[0] )
2213: return jQuery.event.trigger( type, data, this[0], false, fn );
2214: return undefined;
2215: },
これらのインスタンスメソッドは、全く同様の引数をとり、共に対象要素に登録されている、type で指定されたイベントタイプに対応するイベントハンドラー関数を起動します。しかし、微妙に異なる引数(上のピンク色の2箇所)を $.event.trigger() に渡してこのクラスメソッドを起動し、このメソッドに全ての処理を委ねた上で処理結果を return します。したがってこれらの2つのインスタンスメソッドの挙動を知るには $.event.trigger メソッドを理解する必要があります。
しかしその前に、2つのメソッドの差異を外観しておきます。
更に、$.event.trigger() クラスメソッドの解読を行う前に、これらのインスタンスメソッドの実例を見ておきます。これらのメソッドが何を行うのか理解することが先決であり、本家 jQuery サイトにいくつかの例示がありますが、第三引数の fn を与えた例はなく、また例そのものが分かりやすいとは言えないからです。
例は、$(args).trigger() メソッドの引数が1つだけ、2つ及び3つの場合の各々の違いが分かるように3パターン作成し、更にtriggerされるイベントタイプも click、dblclick 及び mouseover の3種類とし、合計9つのパターンの例を作成しました。
複雑な挙動をするtrigger()インスタンスメソッドを十分に理解するには、これだけの例が必要でした。
使い方
triggerHandler() メソッドは、後に $.event.trigger() メソッドの解読でその仕組みを明らかにしますが、trigger メソッドと異なるのは、ブラウザ既定の動作を停止させる点です。
ですから、既定の動作を持たないタイプのイベントがバインドされた要素ノードを対象として、このメソッドを適用しても何も意味がありません。
ここに既定の動作を持つイベントタイプには何があるのか、その点は不明です。分かっていることはfocus()、blur()、click()などの、a タグやinput、textarea タグなどが元々有しているメソッド名と一致するイベントタイプが「ブラウザ既定の動作を有する」ということが出来るであろうことです。
さて、実例を作ってみようとしたのですが、jQuery本家サイト以上のそれは作れませんでしたので、本家サイトの例を引用して解説しようと思います。
愈々、trigger() 及び triggerHandler() がどのようにして作用しているのか、その挙動を探ります。これらの2つのメソッドから呼び出される $.event.trigger() を解読します。
trigger() クラスメソッドは type、data、elem、donative 及び extra の5つの引数を取ります。
これらは順に、
を意味しています。
data 引数を配列にし、data がなければ空の配列を作り data に代入する。data には trigger メソッドを起動させたイベントオブジェクトなどを記述する。
1962: trigger: function(type, data, elem, donative, extra) {
1963: // Clone the incoming data, if any
1964: data = jQuery.makeArray(data || []);
1965:
第3引数の elem がない場合の処理です。この場合において、当該頁にイベントが登録されていれば、全てのノードを対象としてtrigger()メソッドを再帰呼び出しし、イベントが全く登録されていなければ何もしません。
1966: // Handle a global trigger
1967: if ( !elem ) { //elem が指定されていなければ
1968: // Only trigger if we've ever bound an event for it
1969: if ( this.global[type] ) //typeイベントが登録されていれば
// 全てのノードを対象として trigger クラスメソッドを再帰呼び出しする。
1970: jQuery("*").add([window, document]).trigger(type, data);
1971:
1972: // Handle triggering a single element
// 1の要素ノードを trigger 対象とする。
1973: } else {
/* elem がテキストやコメントだった場合
* 何もせずに undefined を返す。
*/
1974: // don't do events on text and comment nodes
1975: if ( elem.nodeType == 3 || elem.nodeType == 8 )
1976: return undefined;
1977:
/* elem[type] が関数ならば fn = true、違えば fn = false とする。
* この elem[type] は突然登場し、このメソッド以外では使われていない。
* これはブラウザ固有の type メソッドが elem に指定されている場合に
* 部分であり、2010-2017 行に連動する。
*/
1978: var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
/* data 配列が空ならば、あるいは data 配列の最初の要素に preventDefault
* プロパティがなければ(つまりそれがイベントオブジェクトでなければ)
* evt = true とする。その他の場合には evt = false とする。
* こうすることにより、イベントオブジェクトが第一引数にない場合において
* var evt = true としてダミーイベントを用意する準備をしている。
*/
1979: // Check to see if we need to provide a fake event, or not
1980: evt = !data[0] || !data[0].preventDefault;
1981:
// ダミーのイベントオブジェクトを作って data 配列の先頭要素とする。
// その type プロパティは type、target プロパティは elem とする。
1982: // Pass along a fake event
1983: if ( evt )
1984: data.unshift( this.fix({ type: type, target: elem }) );
1985:
/* data の最初の要素としてユーザーが指示したイベントオブジェクト、
* 又は 1721 行で作ったダミーのイベントオブジェクトの、type
* プロパティを type とする。
* これは専らダミーイベントへの対応策であって、イベントオブジェクトの
* type プロパティを与える目的のための行である。そうしないとダミーイベ
* ントとして用を為さないから。
*/
1986: // Enforce the right trigger type
1987: data[0].type = type;
1988:
elem に対応する cache.id オブジェクトの "handle" プロパティ値が存在し、それが関数であれば、data を引数とする関数を elem のメソッドとして実行する。ここに data[0] はこれまでの処理でイベントオブジェクトとなっている。
これにより指定した type イベントに対応して登録されているイベントハンドラー関数が呼び出され、実行される。なお、当該関数の返値がvalに代入される。
1989: // Trigger the event 1990: if ( jQuery.isFunction( jQuery.data(elem, "handle") ) ) 1991: val = jQuery.data(elem, "handle").apply( elem, data ); 1992:
(1)fn が存在せず、(2)elemに "on"+type 属性があり、(3)その属性値である関数を data を引数として実行して return 値が false ならばval に false を代入する。
これにより"on"+type 属性値である関数が励起・実行される。しかし、この行の起動を確認することは出来なかった。
1993: // Handle triggering native .onfoo handlers 1994: if ( !fn && elem["on"+type] && elem["on"+type].apply( elem, data ) === false ) 1995: val = false; 1996:
// まずダミーイベントが設定されていれば、それを data 配列から削除する。
1997: // Extra functions don't get the custom event object
1998: if ( evt )
1999: data.shift();
2000:
/* 次の部分は ver 1.2.2で大きく変わった箇所です。
* extra が既述されていてそれが関数の場合に、 val の値があれば data 配列に
* その値を結合し、なければ data のままで、その配列を引数として当該関数を実
* 行し、retに実行結果を返す。
* この場合、1998-1999 行によりダミーイベントは削除されている一方、最初に
* data にイベントオブジェクトが記述されていれば、それが引数として使われる。
*/
2001: // Handle triggering of extra function
2002: if ( extra && jQuery.isFunction( extra ) ) {
2003: // call the extra function and tack the current return value on the end for possible inspection
2004: ret = extra.apply( elem, val == null ? data : data.concat( val ) );
/* もし何かが返されれば、それを優先的に val に代入してvalを上書きする。
2005: // if anything is returned, give it precedence and have it overwrite the previous value
2006: if (ret !== undefined)
2007: val = ret;
2008: }
(1)fn が存在し、(2)donative が trueで、(3)val も true で、(4)elem が a 要素でなく、(5)type が click でないならば、triggerd の値を true としてから、elem[type]()メソッドを実行する。
この部分は donative に関わる部分、つまりブラウザ固有の動きをさせるか、させないかを決める部分である。
trigger() インスタンスメソッドの場合には donative = true として jQuery.event.trigger() メソッドが起動されるので、elem[type]() が実行される。しかし、triggerHandler() メソッドの場合には donative = false として jQuery.event.trigger() メソッドが起動されるため、ブラウザ固有のメソッドすなわち elem[ type ]() は起動されない。
2010: // Trigger the native events (except for clicks on links)
2011: if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
//次の行は1843行(in add() クラスメソッド)に関わる。
2012: this.triggered = true;
2013: try {
2014: elem[ type ]();
2015 // prevent IE from throwing an error for some hidden elements
2016 } catch (e) {}
2017: }
2018:
2019: this.triggered = false;
2020: }
2021: 2022: return val; 2023: }, 2024:
90%近いシェアを握っているインターネットエクスプローラの描画エンジンを利用したタブbrowser。沢山のタブbrowserがあるが、多機能、カスタマイズフリー、スクリプト利用等で一日の長がある。Gekkoエンジンへの対応も行われ、IEからの自立独立の方向に向かっている。2005年7月にはIE7が登場する見通しの中で、今後の発展が望まれる。
多様なCSS作成支援機能を備えた、タグ入力式 HTML&CSS作成支援エディタ。スキンデザインもすっきりしている。テキストエディター上で作成するよりも確実で安全にタグ打ちが出来る。
文字コードを選べないのが欠点。
StyleNote同様のタグ入力式 HTML&CSS 作成支援エディタ。長年使用してきたが現在StyleNoteに乗り換えつつある。
クリップボード履歴情報を活用する為のソフト。画像まで履歴を取ってくれるのが嬉しい。このソフトを使わない日は絶対ない程に重宝し、愛用している。
起動中のウィンドウの「コピーできない」説明文などの文字列を取得し、コピー可能な文字データにするツール。何かと便利。
ストリーミングデータを保存することが出来るソフト。動画利用には不可欠なソフトだ。
無料ながらレイヤー機能を有し、スクリプトによる拡張も可能な、sleipnir作者が提供している優れもの画像編集ソフト。
画面キャプチャソフトと言えばこれに勝るものなし、ではないだろうか? 様々な取得方法を有しており、ブログ作成にもHomepage作成に不可欠だ。Jtrimと並んでWoodyBellsの作品。
複数ファイルの同時編集は出来ないが、透過pngも作れる画像編集ソフト。
(以下当該サイトから抜粋)初心者にも簡単に操作が出来るフォトレタッチソフトです。多くの加工機能で画像に様々な効果を与えることができます。非常に軽快に動作するため、ストレスなく操作できます。
Animation Gifファイルを作れる無料ソフト。
キャプチャソフト。画面内にサイト全体が表示しきれない場合でも、これを使えば全体をキャプチャすることが出来る。
画像処理。画像のフォーマット変換のみならず、色数やサイズ、圧縮率の変更まで一括処理できてしまう『BatchGOO!』は、大量の画像をまとめて処理したいときに大変便利なソフト。BMP, TIFF, JPEG, PCX, PNG の相互変換をはじめ、色数・サイズ・解像度の統一、JPEG圧縮率の調節など、ホームページ用の画像や携帯電話用の壁紙を揃えるのに抜群の相性を見せる。(Vectorの当該ソフト紹介頁より抜粋引用)
名前から直ぐに想像が付くように画像のサイズを測るためのソフトだ。Homepage作成には欠かせない。2カラム、3カラムのレイアウトを行う場合に大変重宝する。
ランチャーソフトは沢山あるが、中でもこれが一押しだ。2年以上使ってきたがその操作性には毎日満足している。これを使い始めてからデスクトップには一切のアイコンを表示することをやめてしまった。
AdobeReader7によって、起動時間が長すぎるという長年のユーザーの不満はある程度解消した。そのためこの高速化ソフトは存在価値が低下してしまったかもしれない。AdobeReader6迄はこのソフトによる起動高速化で恩恵を受けてきた。
IE専用が難点だが、様々なサイト内でIDやパスワードを入力するのに重宝するソフト。コンテキストメニューから簡単に起動できるのがGood! sleipnir等のIEの描画エンジンを利用しているブラウザでも使える。
利用しているパソコンの諸元値を取得するには、このソフトがベストだ。インストール済みソフトの一覧が取得できるのも嬉しい。
WMPは機能が豊富なだけ重い。RealPlayerも同様だ。そこでMedia Player Classicを使いたい。動作が軽快なだけではなく、対応しているファイル形式もすこぶる多く、これひとつで、wmvもrmも表示できてしまうのだから凄い! 数多あるMedia Playerの王様と言えるだろう。
自宅でPCを起動しているときには必ず起動しているメディアプレーヤー。何かと過剰なWinampよりも、起動も速くスキンはシンプルだ。
DivX, Xvid, Mov, Vob, Mpeg, Mpeg4, avi, wmv, dv, などの動画をDVD-Video形式に変換できるフリーソフト。クリックするとDVD関連ソフト紹介サイト=「DVDなToolたち」なるHomepageが開きます。