2

現在、Java EEアプリケーションであるMaximoのブックマークレットに取り組んでおり、いくつかの入力ボックスにデータを入力する必要があります。

通常、ユーザーがボックスにデータを入力するときは、ポップアップを表示するボタンをクリックして、スクリプトに追加する値を検索します。または、名前を入力してTab / Enterキーを押すと、大文字に変わり、バックグラウンドでいくつかの処理が実行されます(正確に何が実行されるかはわかりません)。

私は現在使用しています

Javascript: $('mx1354').value = "KHBRARR"; $('mx1354').ov= "KHBRARR";

しかし、それは私が必要とするようには機能しません。入力ボックスを必要な値に設定しますが、バックグラウンド機能を実行しないため、保存ボタンを押すと、変更として認識されず、ボックスに入れたものが破棄されます。

タブ/Enterボタンが押されたことをどのようにシミュレートできますか?

これまで、onchange、focus / blur、およびclick関数を呼び出そうとしました(正しく呼び出したかどうかは100%わかりません)。

dojoライブラリはアプリケーションの一部であるため、それが機能である場合、またはjQueryによって競合が発生する場合に、dojoライブラリを使用できるかどうかはわかりません。

PSこれはIEで実行する必要があります。

OnChange関数:

function tb_(event)
{
    event = (event) ? event : ((window.event) ? window.event : "");
    if(DESIGNMODE)
        return;
    var ro = this.readOnly;
    var exc=(this.getAttribute("exc")=="1");
    switch(event.type)
    {
        case "mousedown":
            if(getFocusId()==this.id)
                this.setAttribute("stoptcclick","true");
            break;
        case "mouseup":
            if (isIE() && !hasFocus(this)) 
            {
                this.focus();
            }
            if (isBidiEnabled) 
            {
                adjustCaret(event, this); // bidi-hcg-AS
            }
            break;
        case "blur":
            input_onblur(event,this);
            if (isBidiEnabled)                                      // bidi-hcg-SC
                input_bidi_onblur(event, this);
            break;
        case "change":
            if(!ro)
                input_changed(event,this);
            break;
        case "click":
            if(overError(event,this))
                showFieldError(event,this,true);
            var liclick=this.getAttribute("liclick");
            var li=this.getAttribute("li");
            if(li!="" && liclick=="1")
            {
                frontEndEvent(getElement(li),'click');
            }

            if(this.getAttribute("stoptcclick")=="true")
            {
                event.cancelBubble=true;
            }
            this.setAttribute("stoptcclick","false");
            break;
        case "focus":
            input_onfocus(event,this);
            if (isBidiEnabled)                      // bidi-hcg-SC
                input_bidi_onfocus(event, this);
            this.select();
            break;
        case "keydown":
            this.setAttribute("keydown","true");
            if(!ro)
            {
                if(isBidiEnabled)
                    processBackspaceDelete(event,this); // bidi-hcg-AS
                if(hasKeyCode(event, 'KEYCODE_DELETE') || hasKeyCode(event, 'KEYCODE_BACKSPACE'))
                {
                    getHiddenForm().elements.namedItem("changedcomponentvalue").value = this.value;                     
                }
                if((hasKeyCode(event, 'KEYCODE_TAB') || hasKeyCode(event, 'KEYCODE_ESC')))
                {
                    var taMatch = dojo.attr(this, "ta_match");
                    if(taMatch) {
                        if(taMatch.toLowerCase().indexOf(this.value.toLowerCase()) == 0) 
                        {
                            console.log("tamatch="+taMatch);
                            this.value = taMatch;
                            input_keydown(event, this);
                            dojo.attr(this, {"prekeyvalue" : ""});
                            input_forceChanged(this);
                            inputchanged = false;
                            return; // don't want to do input_keydown again so preKeyValue will work
                        }
                    }
                    if(this.getAttribute("PopupType"))
                    {
                        var popup = dijit.byId(dojohelper.getPopupId(this));
                        if (popup)
                        {
                            dojohelper.closePickerPopup(popup);
                            if(hasKeyCode(event, 'KEYCODE_ESC'))
                            {
                                if (event.preventDefault)
                                {  
                                    event.preventDefault();  
                                }
                                else
                                {  
                                    event.returnValue  = false;  
                                }  

                                return;
                            }
                        }
                    }
                }
                input_keydown(event,this);
                datespin(event,this);
            }
            else if(hasKeyCode(event,'KEYCODE_ENTER') || (hasKeyCode(event,'KEYCODE_DOWN_ARROW') && this.getAttribute("liclick")))
            {
                var lbId = this.getAttribute("li");
                frontEndEvent(getElement(lbId), 'click');
            }
            else if(hasKeyCode(event,KEYCODE_BACKSPACE))
            {
                event.cancelBubble=true;
                event.returnValue=false;
            }
            break;
        case "keypress":
            if(!ro)
            {
                if(event.ctrlKey==false && hasKeyCode(event,'KEYCODE_ENTER'))
                {
                    var db = this.getAttribute("db");
                    if(db!="")
                    {
                        sendClick(db);
                    }
                }
            }
            break;
        case "keyup":
            var keyDown = this.getAttribute("keydown");
            this.setAttribute("keydown","false");
            if(event.ctrlKey && hasKeyCode(event,'KEYCODE_SPACEBAR'))
            {
                if(showFieldError(event,this,true))
                {
                    return;
                }
                else
                {
                    menus.typeAhead(this,0);
                }
            }
            if(!ro)
            {
                if(isBidiEnabled)
                    processBidiKeys(event,this); // bidi-hcg-AS

                numericcheck(event,this);   
                var min = this.getAttribute("min");
                var max = this.getAttribute("max");

                if(min && max && min!="NONE" || max!="NONE")
                {
                    if(min!="NONE" && parseInt(this.value)<parseInt(min))
                    {
                        this.value=min;
                        getHiddenForm().elements.namedItem("changedcomponentvalue").value = this.value;                     
                        this.select();
                        return false;
                    }

                    if(max!="NONE" && parseInt(this.value)>parseInt(max))
                    {
                        this.value=max;
                        getHiddenForm().elements.namedItem("changedcomponentvalue").value = this.value;
                        this.select();
                        return false;
                    }
                }
                var defaultButton = false;
                if(event.ctrlKey==false && hasKeyCode(event,'KEYCODE_ENTER'))
                {
                    var db = this.getAttribute("db");
                    if(db!="")
                    {
                        defaultButton=true;
                    }
                }
                input_changed(event,this);                  
            }
            else
            {
                setFocusId(event,this);
            }
            if(showFieldHelp(event, this))
            {
                return;
            }
            if(keyDown=="true" && hasKeyCode(event, 'KEYCODE_ENTER') && !event.ctrlKey && !event.altKey)
            {
                menus.typeAhead(this,0);
                return;
            }
            if(!hasKeyCode(event, 'KEYCODE_ENTER|KEYCODE_SHIFT|KEYCODE_CTRL|KEYCODE_ESC|KEYCODE_ALT|KEYCODE_TAB|KEYCODE_END|KEYCODE_HOME|KEYCODE_RIGHT_ARROW|KEYCODE_LEFT_ARROW')
                    && !event.ctrlKey && !event.altKey)
            {
                menus.typeAhead(this,0);
            }
            break;
        case "mousemove":
            overError(event,this);
            break;
        case "cut":
        case "paste":
            if(!ro)
            {
                var fldInfo = this.getAttribute("fldInfo");
                if(fldInfo)
                {
                    fldInfo = dojo.fromJson(fldInfo);
                    if(!fldInfo.query || fldInfo.query!=true)
                    {
                        setButtonEnabled(saveButton,true);
                    }
                }
                window.setTimeout("inputchanged=true;input_forceChanged(dojo.byId('"+this.id+"'));", 20);
            }
            break;
    }
}
4

4 に答える 4

4

しばらくして、JavaScriptを介してページに変更を加えるには、バックエンドで確認できるように非表示のフォームを送信する必要があることがわかりました。

入力フィールドの値を変更するために使用したコードは次のとおりです。

        cc : function(e,v){
            e.focus(); //Get focus of the element
            e.value = v; //Change the value
            e.onchange(); //Call the onchange event
            e.blur(); //Unfocus the element
            console.log("TITLE === "+e.title);
            if(e.title.indexOf(v) != -1) {
                return true; //The value partially matches the requested value. No need to update
            } else {
                //Generate an hidden form and submit it to update the page with the new value
                var hiddenForm = getHiddenForm();
                var inputs = hiddenForm.elements;
                inputs.namedItem("changedcomponentid").value = e.id;
                inputs.namedItem("changedcomponentvalue").value = v;
                inputs.namedItem("event").value = "X"; //Send a Dummy Event so the script see's its invalid and sets the right Event
                submitHidden();
            }
            //Value isn't set to the required value so pass false
            return false;
        }
于 2013-05-22T13:58:14.887 に答える
1

これを実行します

input_changed(null,document.getElementById('IDHERE'));
于 2013-05-11T10:24:08.290 に答える
0

maximo 7.5では、カスタムルックアップを作成しました

色付きのハイパーリンクをクリックすると、Javaスクリプトが呼び出されて、値が親フォームの値に更新されるか、更新されますが、値を保存するか、更新されません。

  function riskmatrix_setvalue(callerId, lookupId, value,bgrColor,targetid){       
   if (document.getElementById(callerId).readOnly){
    sendEvent('selectrecord', lookupId);
    return;
}
textBoxCaller = document.getElementById(callerId);

//dojo.byId(callerId).setAttribute("value", value);
//dojo.byId(callerId).setAttribute("changed", true);
//dojohelper.input_changed_value(dojo.byId(callerId),value);
//textBoxCaller.style.background = bgrColor;
//var hiddenForm = getHiddenForm();
//if(!hiddenForm)
 //       return;
//var inputs = hiddenForm.elements;
//inputs.namedItem("event").value = "setvalue";
//inputs.namedItem("targetid").value = dojo.byId(callerId).id;
//inputs.namedItem("value").value = value;
//sendXHRFromHiddenForm();
textBoxCaller.focus(); //Get focus of the element
textBoxCaller.value = value; //Change the value
textBoxCaller.onchange(); //Call the onchange event
textBoxCaller.blur(); //Unfocus the element
//Generate an hidden form and submit it to update the page with the new value
var hiddenForm = getHiddenForm();
var inputs = hiddenForm.elements;
inputs.namedItem("changedcomponentid").value = textBoxCaller.id;
inputs.namedItem("changedcomponentvalue").value = value;
inputs.namedItem("event").value = "X"; //Send a Dummy Event so the script see's its invalid and sets the right Event
submitHidden();
sendEvent("dialogclose",lookupId);

 }
于 2013-09-04T10:05:47.997 に答える
0

説明

@ Steven10172の完璧なソリューションを少し変更して、Javascriptで再利用可能な関数にしました。

これを追加した元の回答への編集が拒否されたため、これを別の回答にしました:)

また、行をに変更する必要がありました。そうしないと、テキストボックスハンドラー(関数)がをスローするためです。e.onchange()e.onchange(e)tb_(eventOrComponent) TypeError: textbox.getAttribute is not a function


コード

var setFakeValue = function(e,v){
    console.log("Changing value for element:", e, "\nNew value:", v);

    e.focus(); //Get focus of the element
    e.value = v; //Change the value
    e.onchange(e); //Call the onchange event
    e.blur(); //Unfocus the element


    if(e.title.indexOf(v) != -1) {
        return true; //The value partially matches the requested value. No need to update
    }
    else {
        //Generate an hidden form and submit it to update the page with the new value
        var hiddenForm = getHiddenForm();
        var inputs = hiddenForm.elements;
        inputs.namedItem("changedcomponentid").value = e.id;
        inputs.namedItem("changedcomponentvalue").value = v;
        inputs.namedItem("event").value = "X"; //Send a Dummy Event so the script see's its invalid and sets the right Event
        submitHidden();
    }
    //Value isn't set to the required value so pass false
    return false;
}

使用法

setFakeValue(html_element, new_value);

楽しい事実

Maximoで値をプログラムで変更するための解決策を探すのに多くの時間を費やしました<input>...ある時点で、私は本当にイライラし、あきらめて、それは不可能だと思い始めました...

しばらく前に私はまったく期待せずに検索しようとしました、そしてしばらくして私は解決策を見つけました...ここに...

さて...ご覧のとおり、これは文字通りStackOverflowの完全なコピーであり、質問と解決策(プレーンテキストで賛成票をマークする笑)を含みますが、中国語では...これは私に興味を持ち、少し検索した後、これを見つけましたStackOverflowに投稿してください。

そのページの何かを理解できるようにするChrome組み込みのWebページトランスレータへのハイタッチ^^

于 2020-03-08T23:56:09.810 に答える