2012-06-05 2 views
1

현재 Java EE 애플리케이션 인 Maximo의 북마크릿을 작성 중이며 몇 개의 입력란을 채워야합니다.JavaScript가 Maximo에서 OnChange를 강제 실행합니다.

일반적으로 사용자가 상자에 데이터를 입력하면 팝업을 제공하는 버튼을 클릭하고 스크립트에 추가 할 값을 검색합니다. 또는 이름을 입력하고 탭/입력 할 수도 있고 대문자로 바꿀 수도 있고 백그라운드에서 몇 가지 작업을 수행 할 수도 있습니다.

나는 현재

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

을 사용하지만 그것은 필요처럼 작동하지 않습니다. 필요한 값으로 입력 상자를 설정하지만 배경 기능을 실행하지 않습니다. 저장 버튼을 누르면 변경 사항으로 인식되지 않고 상자에 넣은 것을 버립니다.

탭/입력 버튼을 시뮬레이션하려면 어떻게해야합니까?

지금까지 onchange, focus/blur 및 click 함수를 호출하려고 시도했습니다 (올바르게 호출 한 경우 100 % 확신 할 수 없음).

도장 라이브러리는 애플리케이션의 일부이므로, 기능면 jQuery가 충돌을 일으킬 수 있는지 여부를 잘 모르겠습니다.

P. 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; 
    } 
} 

답변

2

에게 백엔드에서 확인할 수 있습니다.

입력 필드의 값을 변경하는 데 사용한 코드는 다음과 같습니다.

 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; 
     } 
0

실행 나는 자바 스크립트를 통해 페이지를 변경하기 위해 당신이 그것을 그래서 숨겨진 양식을 제출해야한다는 것을 발견 몇 시간 후이

input_changed(null,document.getElementById('IDHERE')); 
+0

이미 백그라운드에서 숨겨진 양식을 제출하여 작업하고 있습니다. 호출 할 함수를 찾기 위해 파고 들었다. – Steven10172

0

는 MAXIMO 7.5에서 나는 사용자 정의 조회를 구축

나는 컬러 하이퍼 링크 자바 스크립트가 부모 폼 값으로 다시 값을 업데이트하기 위해 호출 또는 업데이트 만에 값을 저장하거나

을 업데이트되지 않습니다 클릭 할 때
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); 

} 
관련 문제