画面内の全チェックボックスをON/OFFするブックマークレット
解説
JavaScriptでチェックボックスのcheckedプロパティを変更しても、clickイベントが発生しない。そのため、単純にcheckedプロパティの変更のみを行っても、clickイベントで何らかの処理を行っているシステムなどではGUIでの操作をエミュレートできていないことになる。(結果、変なJavaScriptエラーが発生して悩んだりすることになる。)
下記のコードでは、if (d.createEvent) から始まるブロック部分で、JavaScriptからイベントを発生させている。比較的新しいブラウザであれば、うまく動作するだろう。このような処理は、jQueryなどの各種JavaScriptライブラリで、triggerといったメソッド名で実装されている。
元のコード
javascript: (function() { var d = document, a = d.getElementsByTagName("input"), c, e, b = confirm("check?"); for (var i = 0; i < a.length; i++) { c = a[i]; if ((c.type == "checkbox") && (c.checked != b)) { c.checked = b; if (d.createEvent) { e = d.createEvent("HTMLEvents"); e.initEvent("click", true, true); c.dispatchEvent(e); } else if (d.createEventObject) { e = d.createEventObject(); e.element = function() { return e.srcElement; }; c.fireEvent("onclick", e); } } } })();
ブックマークレット化したコード
javascript:(function(){var d=document,a=d.getElementsByTagName("input"),c,e,b=confirm("check?");for(var i=0;i<a.length;i++){c=a[i];if((c.type=="checkbox")&&(c.checked!=b)){c.checked=b;if(d.createEvent){e=d.createEvent("HTMLEvents");e.initEvent("click",true,true);c.dispatchEvent(e);}else if(d.createEventObject){e=d.createEventObject();e.element=function(){return e.srcElement;};c.fireEvent("onclick",e);}}}})();
*1:全てWin XP Pro SP2上