中央クリックと右クリック(多すぎる)を妨げることなく、ダブル左クリックを処理する1つの方法は、次のとおりです。
- イベントの発生
<option>
時にが選択されたかどうかを追跡します。mousedown
- 後でマウスクリックイベントが発生したときに、まだ選択されていることを確認してください。
- 両方の条件が当てはまる場合は、同封のフォームを送信してください。
コードを大幅に簡略化するために、今回はjQueryを使用します。jsFiddleで動作中のコードを参照してください。
完全なスクリプトは次のようになります。
// ==UserScript==
// @name _Activate double-click on select, submits form
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change introduced
in GM 1.0. It restores the sandbox.
*/
$("select[name=z_pos_id] option").bind ("mousedown click", handleOptionClicks);
function handleOptionClicks (zEvent) {
_self = handleOptionClicks;
_self.optionWasSelected = _self.optionWasSelected || false;
if (zEvent.type == "mousedown") {
_self.optionWasSelected = zEvent.target.selected;
}
else {//zEvent.type == "click"
if (zEvent.target.selected && _self.optionWasSelected) {
//-- Double-click, so submit form:
$(this).parents ("form").submit ();
}
}
}
更新:これはChromeでも動作するバージョンです(スクリプトインジェクションを使用する必要があります)。
これは、ターゲットページにまだjQueryがないことを前提としています。
// ==UserScript==
// @name _Activate double-click on select, submits form
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant none
// ==/UserScript==
function GM_main ($) {
$("select[name=z_pos_id] option").bind ("mousedown click", handleOptionClicks);
function handleOptionClicks (zEvent) {
_self = handleOptionClicks;
_self.optionWasSelected = _self.optionWasSelected || false;
if (zEvent.type == "mousedown") {
_self.optionWasSelected = zEvent.target.selected;
}
else {//zEvent.type == "click"
if (zEvent.target.selected && _self.optionWasSelected) {
//-- Double-click, so submit form:
$(this).parents ("form").submit ();
}
}
}
}
add_jQuery (GM_main, "1.7.2");
function add_jQuery (callbackFn, jqVersion) {
jqVersion = jqVersion || "1.7.2";
var D = document;
var targ = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
var scriptNode = D.createElement ('script');
scriptNode.src = 'http://ajax.googleapis.com/ajax/libs/jquery/'
+ jqVersion
+ '/jquery.min.js'
;
scriptNode.addEventListener ("load", function () {
var scriptNode = D.createElement ("script");
scriptNode.textContent =
'var gm_jQuery = jQuery.noConflict (true);\n'
+ '(' + callbackFn.toString () + ')(gm_jQuery);'
;
targ.appendChild (scriptNode);
}, false);
targ.appendChild (scriptNode);
}