Greasemonkey无法从下拉列表中选择

时间:2014-04-08 09:23:12

标签: javascript jquery drop-down-menu greasemonkey

我使用在线外汇交易网站。我使用此website(在交易网站上向下滚动以查看资产图表)。我用它来交易和查看外汇图。 当我在浏览器(firefox)中打开页面时,我想使用Greasemonkey脚本自动选择或“预设”页面,使用我交易的外汇资产,以便页面加载我使用的图表。例如,我想自动选择“AUD / USD”。

我尝试过使用JQuery / JS选择/点击的不同方法。如果有人可以提供帮助,我将非常感激。

我尝试了以下各项无济于事:

$("#assetPlatformSelect_0_chzn a span").text("AUD/USD");
$(".chzn-search input").val("AUD/USD");

    // $(".chzn-search input").focus(); //tried with and without focus
    var p = jQuery.Event('keydown');
    p.which = 13;
    p.keyCode = 13;
    $(".chzn-search input").trigger(p);     

=======================================

    $("#assetPlatformSelect_0 optgroup[label='currencies'] option").each(function()
    {       
        if($(this).text() == "AUD/USD") 
        {
            $(this).attr('selected', true);                         
        }
        else
        {
            $(this).attr('selected', false);                
        }
    }); 
var clickNode = "";
    var val2 = "assetPlatformSelect_0_chzn_o_";
    $("li[id^=" + val2 + "]").each(function()
    {   
        if($(this).text() == "AUD/USD") 
        {
                       //tried each and combination of these....
            clickOnFollowButton($(this));
clickNode = $(this).attr('id');
            $(this).click();
            $(this).addClass('result-selected');
            $(this).live('click', function () {
                    $(this).click();
                    });             
        }
        else
            $(this).removeClass('result-selected');

    });

function clickOnFollowButton (jNode) {
    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    jNode[0].dispatchEvent (clickEvent);
}

=======================

waitForKeyElements ("#assetPlatformSelect_0_chzn a", triggerMostButtons);
function triggerMostButtons (jNode) {
    triggerMouseEvent (jNode[0], "mouseover");
    triggerMouseEvent (jNode[0], "mousedown");
    triggerMouseEvent (jNode[0], "click");
    triggerMouseEvent (jNode[0], "mouseup");
    //clickNode is the Li item to select/click
console.log($(clickNode));
triggerMostButtons2 (clickNode);
}
function triggerMostButtons2 (jNode) {
    triggerMouseEvent (jNode[0], "mouseover");
    triggerMouseEvent (jNode[0], "mousedown");
    triggerMouseEvent (jNode[0], "click");
    triggerMouseEvent (jNode[0], "mouseup");

}

1 个答案:

答案 0 :(得分:0)

经过数小时的测试和测试,不同的选项没有任何效果。我终于回去并使用chrome检查来检查每个元素,然后我发现选项列表的父元素有一个更改eventListener。 我不知道为什么但是当greasemonkey / js更新列表时,不会触发更改eventlistener。所以现在更新列表对象后,我在greasemonkey中触发了change事件,解决了这个问题。请参阅下面的代码。

$("#assetPlatformSelect_0_chzn a span").text("AUD/USD");
//trigger the change eventlistener on the <select> object
fireChangeEvent("assetPlatformSelect_0");

==============

function fireChangeEvent(elmId)
{
    var element = document.getElementById(elmId);
    if ('fireEvent' in element)
        element.fireEvent("onchange");
    else {
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent("change", false, true);
        element.dispatchEvent(evt);
    }
}