2013-07-06 3 views
1

Enter 키를 양식의 탭 키와 똑같이 동작하게 만들려고합니다.키보드 키를 mootools로 매핑하십시오.

fireEvent 섹션에 멈추었습니다.

var inputs = $$('input, textarea'); 
    $each(inputs,function(el,i) { 
    el.addEvent('keypress',function(e) { 
    if(e.key == 'enter') { 
     e.stop(); 
     el.fireEvent('keypress','tab'); 
    } 
    }); 
}); 

지정한 키를 사용하여 키 누르기 이벤트를 발생시키는 방법은 무엇입니까? 어떤 도움이라도 대단히 감사하겠습니다.

+1

지금까지는 이것이 가능하지 않은 것처럼 보입니다. 나는 틀린 것으로 증명되고 싶습니다. :) –

답변

1

이 작동하지만이 DOM 순서에 의존하지 추가적으로

var inputs = $$('input,textarea'); 

inputs.each(function(el,i){ 
    el.addEvent('keypress',function(e) { 
     if(e.key == 'enter'){ 
      e.stop(); 
      var next = inputs[i+1]; 
      if (next){ 
       next.focus(); 
      } 
      else { 
       // inputs[0].focus(); or form.submit() etc. 
      } 
     } 
    }); 
}); 

을 tabIndex를, 텍스트 영역 캡처를 입력? 왜, 다중 라인인가 ... 어쨌든, 키보드 레벨에서 그것을하려면 Syn을보십시오. https://github.com/bitovi/syn

위의 내용은 숨겨진 요소 (필터링 할 수 있음)와 사용할 수없는 요소 등으로는 실패하지만 -이라는 생각을 갖습니다. 무엇을 해야할지 모르겠다. input[type=radio|checkbox|range]

p.s. .fireEvent()은 실제로 이벤트를 생성하지 않고 바운드 이벤트 핸들러를 호출하기 때문에 코드가 작동하지 않습니다.

+0

감사합니다.이 코드를 시도했지만, 문제는 $$() 배열이 반드시 요소를 반환하지 않는다는 것입니다 순서대로 텍스트 영역이 입력 후에 따라옵니다. 더우기, 새로운 항목이 동적으로 추가되면 배열을 새로 고쳐야합니다. –

+0

그러면 tabindexes를 올바르게 유지하고 'this.getNext ('input [tabindex = '+ this.get ('tabindex '))'- 또는 키 이벤트를 수동으로 브라우저에서 실행하는 것을 고려해야합니다. –

+0

특정 입력 및 텍스트 영역에 특정 클래스를 추가하기로 결정하여 정확한 순서로 반환했습니다. –

0

class keyboard (MooTools More)을 살펴보십시오.

키에 대한 개별 이벤트를 발생시키고 키보드 인스턴스에 할당 된 리스너를 사용 불가능하게하거나 사용 가능하게하는 방법론을 제공합니다.

manual has some examples how to work with this class은, 여기에 내가 비슷한 상황에서이를 구현하는 방법을 단순한 예제 :

var myKeyEv1 = new Keyboard({ 
    defaultEventType: 'keydown' 
}); 

myKeyEv1.addEvents({ 
    'shift+h': myApp.help() // <- calls a function opening a help screen 
}); 

이 예에서 enter 키에 관해서는, 당신은 발사에서 입력 이벤트를 방지하기 위해 어딘가에 return false에 있습니다. 자세한 내용은 this SO post을 확인하십시오.

관련 문제