簡體   English   中英

如何通過雙擊下拉列表提交值?

[英]How to submit values by double-clicking in drop-down list?

我正在尋找一種使用Greasemonkey在下拉列表( 自動調整大小 )中單擊兩次以提交值的方法。

目標HTML:

<form method="post">
  <select size="3" name="z_pos_id">
    <option value="2463">Option A</option>
    <option value="2609">Option B</option>
    <option value="3013">Option C</option>
  </select>
  <input type="submit" value="Button">
</form>

此刻,我單擊選項以將其選中,然后單擊按鈕以提交值(按Enter也可以)。

但是,對於Greasemonkey腳本,我想單擊該選項以將其選中,然后再次單擊所選的選項以將其提交。 這可能嗎?

處理雙 -clicks,而不中心和右鍵單擊(太多)干擾的方法之一,就是:

  1. 跟蹤在mousedown事件觸發時是否選擇了<option>
  2. 確保稍后觸發鼠標單擊事件時仍將其選中。
  3. 如果兩個條件都成立,則提交包含表格。

為了大大簡化代碼,這次使用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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM