Enter 키 누르기는 자바 스크립트의 탭처럼 작동합니다.
Enter 키를 누르면 페이지의 "다음"양식 요소로 포커스가 이동하는 양식을 만들려고합니다. 내가 웹에서 계속 찾는 해결책은 ...
<body onkeydown="if(event.keyCode==13){event.keyCode=9; return event.keyCode}">
불행히도 IE에서만 작동하는 것 같습니다. 이 질문의 진짜 핵심은 FF와 Chrome에서 작동하는 솔루션을 아는 사람이 있다면? 또한 양식 요소 자체 에 onkeydown 이벤트 를 추가 할 필요는 없지만 이것이 유일한 방법이라면해야합니다.
이 문제는 질문 905222 와 유사 하지만 제 생각에는 자체 질문에 해당합니다.
편집 : 또한 사람들이 사용자가 익숙한 형태 행동과 다르기 때문에 이것이 좋은 스타일이 아니라는 문제를 제기하는 것을 보았습니다. 나는 동의한다! 클라이언트 요청입니다 :(
저는 Andrew가 제안한 매우 효과적인 논리를 사용했습니다. 그리고 이것은 내 버전입니다.
$('body').on('keydown', 'input, select, textarea', function(e) {
var self = $(this)
, form = self.parents('form:eq(0)')
, focusable
, next
;
if (e.keyCode == 13) {
focusable = form.find('input,a,select,button,textarea').filter(':visible');
next = focusable.eq(focusable.index(this)+1);
if (next.length) {
next.focus();
} else {
form.submit();
}
return false;
}
});
맵 [Enter] 키를 [Tab] 키처럼 작동합니다.
나는 jQuery에서 나를 위해 작동하지 않은 Andre Van Zuydam 의 대답을 다시 작성 했습니다 . 이것은 Enter및 Shift+를 모두 캡처합니다 Enter. Enter탭은 앞으로, Shift+ Enter탭은 뒤로.
또한 self
포커스가있는 현재 항목에 의해 초기화되는 방식을 다시 작성했습니다 . 양식도 그렇게 선택됩니다. 코드는 다음과 같습니다.
// Map [Enter] key to work like the [Tab] key
// Daniel P. Clark 2014
// Catch the keydown for the entire document
$(document).keydown(function(e) {
// Set self as the current item in focus
var self = $(':focus'),
// Set the form by the current item in focus
form = self.parents('form:eq(0)'),
focusable;
// Array of Indexable/Tab-able items
focusable = form.find('input,a,select,button,textarea,div[contenteditable=true]').filter(':visible');
function enterKey(){
if (e.which === 13 && !self.is('textarea,div[contenteditable=true]')) { // [Enter] key
// If not a regular hyperlink/button/textarea
if ($.inArray(self, focusable) && (!self.is('a,button'))){
// Then prevent the default [Enter] key behaviour from submitting the form
e.preventDefault();
} // Otherwise follow the link/button as by design, or put new line in textarea
// Focus on the next item (either previous or next depending on shift)
focusable.eq(focusable.index(self) + (e.shiftKey ? -1 : 1)).focus();
return false;
}
}
// We need to capture the [Shift] key and check the [Enter] key either way.
if (e.shiftKey) { enterKey() } else { enterKey() }
});
이유 textarea
우리는 "때문에 포함되어있다 할 그것으로 탭"합니다. 또한 일단 Enter들어가면 새 줄에 넣는 기본 동작을 중지하고 싶지 않습니다 .
이유 a
와button
기본 작업 허용 " 및 "은 여전히 다음 항목에 초점을 맞 춥니 다. 이는 항상 다른 페이지를로드하지 않기 때문입니다. 아코디언 또는 탭 콘텐츠와 같은 항목에 트리거 / 효과가있을 수 있습니다. 따라서 기본 동작을 트리거하고 페이지가 특수 효과를 수행하면 트리거가 잘 도입했을 수 있으므로 여전히 다음 항목으로 이동하고 싶습니다.
이것은 나를 위해 일했습니다.
$(document).on('keydown', ':tabbable', function (e) {
if (e.which == 13 || e.keyCode == 13 )
{ e.preventDefault();
var $canfocus = $(':tabbable:visible')
var index = $canfocus.index(document.activeElement) + 1;
if (index >= $canfocus.length) index = 0;
$canfocus.eq(index).focus();
}
});
좋은 대본 감사합니다.
요소 사이를 되돌아 가기 위해 위의 함수에 시프트 이벤트를 추가했습니다. 누군가 이것이 필요할 것이라고 생각했습니다.
$('body').on('keydown', 'input, select, textarea', function(e) {
var self = $(this)
, form = self.parents('form:eq(0)')
, focusable
, next
, prev
;
if (e.shiftKey) {
if (e.keyCode == 13) {
focusable = form.find('input,a,select,button,textarea').filter(':visible');
prev = focusable.eq(focusable.index(this)-1);
if (prev.length) {
prev.focus();
} else {
form.submit();
}
}
}
else
if (e.keyCode == 13) {
focusable = form.find('input,a,select,button,textarea').filter(':visible');
next = focusable.eq(focusable.index(this)+1);
if (next.length) {
next.focus();
} else {
form.submit();
}
return false;
}
});
내가 생각 해낸 가장 간단한 바닐라 JS 스 니펫 :
document.addEventListener('keydown', function (event) {
if (event.keyCode === 13 && event.target.nodeName === 'INPUT') {
var form = event.target.form;
var index = Array.prototype.indexOf.call(form, event.target);
form.elements[index + 1].focus();
event.preventDefault();
}
});
IE 9 이상 및 최신 브라우저에서 작동합니다.
여기에 제공된 모든 구현에 문제가 있습니다. 일부는 텍스트 영역 및 제출 버튼에서 제대로 작동하지 않습니다. 대부분은 시프트를 사용하여 뒤로 이동하는 것을 허용하지 않으며, 탭 인덱스가있는 경우 사용하지 않으며 마지막에서 처음으로 또는 처음으로 줄 바꿈하지 않습니다. 마지막까지.
[enter] 키가 [tab] 키처럼 작동하지만 텍스트 영역 및 제출 버튼에서 제대로 작동하도록하려면 다음 코드를 사용하십시오. 또한이 코드를 사용하면 Shift 키를 사용하여 뒤로 이동할 수 있으며 탭은 앞뒤로, 뒤에서 앞으로 돌아갑니다.
소스 코드 : https://github.com/mikbe/SaneEnterKey
CoffeeScript
mbsd_sane_enter_key = ->
input_types = "input, select, button, textarea"
$("body").on "keydown", input_types, (e) ->
enter_key = 13
tab_key = 9
if e.keyCode in [tab_key, enter_key]
self = $(this)
# some controls should just press enter when pressing enter
if e.keyCode == enter_key and (self.prop('type') in ["submit", "textarea"])
return true
form = self.parents('form:eq(0)')
# Sort by tab indexes if they exist
tab_index = parseInt(self.attr('tabindex'))
if tab_index
input_array = form.find("[tabindex]").filter(':visible').sort((a,b) ->
parseInt($(a).attr('tabindex')) - parseInt($(b).attr('tabindex'))
)
else
input_array = form.find(input_types).filter(':visible')
# reverse the direction if using shift
move_direction = if e.shiftKey then -1 else 1
new_index = input_array.index(this) + move_direction
# wrap around the controls
if new_index == input_array.length
new_index = 0
else if new_index == -1
new_index = input_array.length - 1
move_to = input_array.eq(new_index)
move_to.focus()
move_to.select()
false
$(window).on 'ready page:load', ->
mbsd_sane_enter_key()
자바 스크립트
var mbsd_sane_enter_key = function() {
var input_types;
input_types = "input, select, button, textarea";
return $("body").on("keydown", input_types, function(e) {
var enter_key, form, input_array, move_direction, move_to, new_index, self, tab_index, tab_key;
enter_key = 13;
tab_key = 9;
if (e.keyCode === tab_key || e.keyCode === enter_key) {
self = $(this);
// some controls should react as designed when pressing enter
if (e.keyCode === enter_key && (self.prop('type') === "submit" || self.prop('type') === "textarea")) {
return true;
}
form = self.parents('form:eq(0)');
// Sort by tab indexes if they exist
tab_index = parseInt(self.attr('tabindex'));
if (tab_index) {
input_array = form.find("[tabindex]").filter(':visible').sort(function(a, b) {
return parseInt($(a).attr('tabindex')) - parseInt($(b).attr('tabindex'));
});
} else {
input_array = form.find(input_types).filter(':visible');
}
// reverse the direction if using shift
move_direction = e.shiftKey ? -1 : 1;
new_index = input_array.index(this) + move_direction;
// wrap around the controls
if (new_index === input_array.length) {
new_index = 0;
} else if (new_index === -1) {
new_index = input_array.length - 1;
}
move_to = input_array.eq(new_index);
move_to.focus();
move_to.select();
return false;
}
});
};
$(window).on('ready page:load', function() {
mbsd_sane_enter_key();
}
이 동작을 변경하면 실제로 기본적으로 구현 된 기본 동작보다 훨씬 더 나은 사용자 경험을 제공합니다. 한 줄 입력에서 enter는 양식을 제출하는 경향이있는 반면 여러 줄 텍스트 영역에서는 단순히 내용에 줄 바꿈을 추가하기 때문에 enter 키의 동작이 이미 사용자의 관점에서 일치하지 않는다는 것을 고려하십시오. 들.
나는 최근에 이렇게했습니다 (jQuery 사용).
$('input.enterastab, select.enterastab, textarea.enterastab').live('keydown', function(e) {
if (e.keyCode==13) {
var focusable = $('input,a,select,button,textarea').filter(':visible');
focusable.eq(focusable.index(this)+1).focus();
return false;
}
});
이것은 매우 효율적이지는 않지만 충분히 잘 작동하고 신뢰할 수 있습니다. 이러한 방식으로 작동해야하는 입력 요소에 'enterastab'클래스를 추가하기 만하면됩니다.
OPs 솔루션을 Knockout 바인딩으로 재 작업하고 공유 할 것이라고 생각했습니다. 매우 감사합니다 :-)
여기 에 바이올린이 있습니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1.js" type="text/javascript"></script>
</head>
<body>
<div data-bind="nextFieldOnEnter:true">
<input type="text" />
<input type="text" />
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
<input type="text" />
<input type="text" />
</div>
<script type="text/javascript">
ko.bindingHandlers.nextFieldOnEnter = {
init: function(element, valueAccessor, allBindingsAccessor) {
$(element).on('keydown', 'input, select', function (e) {
var self = $(this)
, form = $(element)
, focusable
, next
;
if (e.keyCode == 13) {
focusable = form.find('input,a,select,button,textarea').filter(':visible');
var nextIndex = focusable.index(this) == focusable.length -1 ? 0 : focusable.index(this) + 1;
next = focusable.eq(nextIndex);
next.focus();
return false;
}
});
}
};
ko.applyBindings({});
</script>
</body>
</html>
다음은 다른 답변을 영감으로 사용하여 다음 필드로 들어가는 angular.js 지시문입니다. angular와 함께 패키지 된 jQlite 만 사용하기 때문에 여기에 이상한 코드가 있습니다. 여기에있는 대부분의 기능은 모든 브라우저> IE8에서 작동합니다.
angular.module('myapp', [])
.directive('pdkNextInputOnEnter', function() {
var includeTags = ['INPUT', 'SELECT'];
function link(scope, element, attrs) {
element.on('keydown', function (e) {
// Go to next form element on enter and only for included tags
if (e.keyCode == 13 && includeTags.indexOf(e.target.tagName) != -1) {
// Find all form elements that can receive focus
var focusable = element[0].querySelectorAll('input,select,button,textarea');
// Get the index of the currently focused element
var currentIndex = Array.prototype.indexOf.call(focusable, e.target)
// Find the next items in the list
var nextIndex = currentIndex == focusable.length - 1 ? 0 : currentIndex + 1;
// Focus the next element
if(nextIndex >= 0 && nextIndex < focusable.length)
focusable[nextIndex].focus();
return false;
}
});
}
return {
restrict: 'A',
link: link
};
});
다음 pdk-next-input-on-enter
은 요소에 지시문을 추가하여 작업중인 앱에서 사용하는 방법 입니다. 바코드 스캐너를 사용하여 필드에 데이터를 입력하고 있습니다. 스캐너의 기본 기능은 스캔 된 바코드의 데이터를 입력 한 후 엔터 키를 삽입하여 키보드를 에뮬레이션하는 것입니다.
이 코드에는 한 가지 부작용이 있습니다 (내 사용 사례에 대한 긍정적 인 것). 버튼으로 포커스를 이동하면 enter keyup 이벤트로 인해 버튼의 동작이 활성화됩니다. 마크 업의 마지막 양식 요소는 바코드를 스캔하여 모든 필드를 "탭"한 후 활성화하려는 버튼이기 때문에 이것은 흐름에 매우 잘 작동했습니다.
<!DOCTYPE html>
<html ng-app=myapp>
<head>
<script src="angular.min.js"></script>
<script src="controller.js"></script>
</head>
<body ng-controller="LabelPrintingController">
<div class='.container' pdk-next-input-on-enter>
<select ng-options="p for p in partNumbers" ng-model="selectedPart" ng-change="selectedPartChanged()"></select>
<h2>{{labelDocument.SerialNumber}}</h2>
<div ng-show="labelDocument.ComponentSerials">
<b>Component Serials</b>
<ul>
<li ng-repeat="serial in labelDocument.ComponentSerials">
{{serial.name}}<br/>
<input type="text" ng-model="serial.value" />
</li>
</ul>
</div>
<button ng-click="printLabel()">Print</button>
</div>
</body>
</html>
비슷한 문제가 있는데 +, 숫자 패드를 눌러 다음 필드로 이동하고 싶었습니다 . 이제 도움이 될만한 라이브러리를 공개했습니다.
PlusAsTab : 숫자 패드 더하기 키를 탭 키에 해당하는 것으로 사용하는 jQuery 플러그인입니다.
enter/ ↵대신 원하는 옵션을 설정할 수 있습니다. jQuery event.which 데모 와 함께 사용할 키를 찾으십시오 .
JoelPurra.PlusAsTab.setOptions({
// Use enter instead of plus
// Number 13 found through demo at
// https://api.jquery.com/event.which/
key: 13
});
// Matches all inputs with name "a[]" (needs some character escaping)
$('input[name=a\\[\\]]').plusAsTab();
PlusAsTab enter as tab demo 에서 직접 시험해 볼 수 있습니다 .
JavaScript에서만 작동합니다. Firefox는 keyCode 업데이트를 허용하지 않으므로 keyCode 13을 트랩하고 keyCode 9를 누른 것처럼 tabIndex에 의해 다음 요소에 초점을 맞추도록하는 것뿐입니다. 까다로운 부분은 다음 tabIndex를 찾는 것입니다. IE8-IE10 및 Firefox에서만 이것을 테스트했으며 작동합니다.
function ModifyEnterKeyPressAsTab(event)
{
var caller;
var key;
if (window.event)
{
caller = window.event.srcElement; //Get the event caller in IE.
key = window.event.keyCode; //Get the keycode in IE.
}
else
{
caller = event.target; //Get the event caller in Firefox.
key = event.which; //Get the keycode in Firefox.
}
if (key == 13) //Enter key was pressed.
{
cTab = caller.tabIndex; //caller tabIndex.
maxTab = 0; //highest tabIndex (start at 0 to change)
minTab = cTab; //lowest tabIndex (this may change, but start at caller)
allById = document.getElementsByTagName("input"); //Get input elements.
allByIndex = []; //Storage for elements by index.
c = 0; //index of the caller in allByIndex (start at 0 to change)
i = 0; //generic indexer for allByIndex;
for (id in allById) //Loop through all the input elements by id.
{
allByIndex[i] = allById[id]; //Set allByIndex.
tab = allByIndex[i].tabIndex;
if (caller == allByIndex[i])
c = i; //Get the index of the caller.
if (tab > maxTab)
maxTab = tab; //Get the highest tabIndex on the page.
if (tab < minTab && tab >= 0)
minTab = tab; //Get the lowest positive tabIndex on the page.
i++;
}
//Loop through tab indexes from caller to highest.
for (tab = cTab; tab <= maxTab; tab++)
{
//Look for this tabIndex from the caller to the end of page.
for (i = c + 1; i < allByIndex.length; i++)
{
if (allByIndex[i].tabIndex == tab)
{
allByIndex[i].focus(); //Move to that element and stop.
return;
}
}
//Look for the next tabIndex from the start of page to the caller.
for (i = 0; i < c; i++)
{
if (allByIndex[i].tabIndex == tab + 1)
{
allByIndex[i].focus(); //Move to that element and stop.
return;
}
}
//Continue searching from the caller for the next tabIndex.
}
//The caller was the last element with the highest tabIndex,
//so find the first element with the lowest tabIndex.
for (i = 0; i < allByIndex.length; i++)
{
if (allByIndex[i].tabIndex == minTab)
{
allByIndex[i].focus(); //Move to that element and stop.
return;
}
}
}
}
이 코드를 사용하려면 html 입력 태그에 추가하세요.
<input id="SomeID" onkeydown="ModifyEnterKeyPressAsTab(event);" ... >
또는 자바 스크립트의 요소에 추가하세요.
document.getElementById("SomeID").onKeyDown = ModifyEnterKeyPressAsTab;
몇 가지 다른 참고 사항 :
입력 요소에서 작업하는 데만 필요했지만 필요한 경우 다른 문서 요소로 확장 할 수 있습니다. 이를 위해 getElementsByClassName이 매우 유용하지만 이는 완전히 다른 주제입니다.
제한은 allById 배열에 추가 한 요소 사이에만 탭한다는 것입니다. html 문서 외부의 도구 모음 및 메뉴와 같이 브라우저에서 수행 할 수있는 다른 항목으로 이동하지 않습니다. 아마도 이것은 제한이 아닌 기능 일 것입니다. 원하는 경우 keyCode 9를 트랩하면이 동작이 탭 키에서도 작동합니다.
Mozilla, IE 및 Chrome에서 테스트 한 아래 코드를 사용할 수 있습니다.
// Use to act like tab using enter key
$.fn.enterkeytab=function(){
$(this).on('keydown', 'input, select,', function(e) {
var self = $(this)
, form = self.parents('form:eq(0)')
, focusable
, next
;
if (e.keyCode == 13) {
focusable = form.find('input,a,select,button').filter(':visible');
next = focusable.eq(focusable.index(this)+1);
if (next.length) {
next.focus();
} else {
alert("wd");
//form.submit();
}
return false;
}
});
}
사용하는 방법?
$ ( "# form"). enterkeytab (); // 키 탭 입력
가능하다면이 작업을 재고 할 수 있습니다 <Enter>
. 양식에서 누르는 기본 동작이 양식을 제출하고이 기본 동작 / 예상 동작을 변경하기 위해 수행하는 모든 작업으로 인해 사이트에 사용성 문제가 발생할 수 있습니다.
Shift + Enter를 지원하고 초점을 맞출 수있는 HTML 태그를 선택할 수있는 기능이있는 Vanilla js. IE9 +에서 작동합니다.
onKeyUp(e) {
switch (e.keyCode) {
case 13: //Enter
var focusableElements = document.querySelectorAll('input, button')
var index = Array.prototype.indexOf.call(focusableElements, document.activeElement)
if(e.shiftKey)
focus(focusableElements, index - 1)
else
focus(focusableElements, index + 1)
e.preventDefault()
break;
}
function focus(elements, index) {
if(elements[index])
elements[index].focus()
}
}
이 시도...
$(document).ready(function () {
$.fn.enterkeytab = function () {
$(this).on('keydown', 'input,select,text,button', function (e) {
var self = $(this)
, form = self.parents('form:eq(0)')
, focusable
, next
;
if (e.keyCode == 13) {
focusable = form.find('input,a,select').filter(':visible');
next = focusable.eq(focusable.index(this) + 1);
if (next.length) {
//if disable try get next 10 fields
if (next.is(":disabled")){
for(i=2;i<10;i++){
next = focusable.eq(focusable.index(this) + i);
if (!next.is(":disabled"))
break;
}
}
next.focus();
}
return false;
}
});
}
$("form").enterkeytab();
});
여기에 내가 생각 해낸 것이 있습니다.
form.addEventListener("submit", (e) => { //On Submit
let key = e.charCode || e.keyCode || 0 //get the key code
if (key = 13) { //If enter key
e.preventDefault()
const inputs = Array.from(document.querySelectorAll("form input")) //Get array of inputs
let nextInput = inputs[inputs.indexOf(document.activeElement) + 1] //get index of input after the current input
nextInput.focus() //focus new input
}
}
여기에 대부분의 대답은 사용 e.keyCode
및 e.which
그 사용되지 않습니다.
대신 e.key === 'Enter'
.
문서 : https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode
- 죄송하지만 지금은이 스 니펫을 테스트 할 수 없습니다. 테스트 후 나중에 다시 올 것입니다.
HTML 사용 :
<body onkeypress="if(event.key==='Enter' && event.target.form){focusNextElement(event); return false;}">
jQuery 사용 :
$(window).on('keypress', function (ev)
{
if (ev.key === "Enter" && ev.currentTarget.form) focusNextElement(ev)
}
그리고 Vanilla JS :
document.addEventListener('keypress', function (ev) {
if (ev.key === "Enter" && ev.currentTarget.form) focusNextElement(ev);
});
focusNextElement()
여기에서 기능을 사용할 수 있습니다 : https://stackoverflow.com/a/35173443/3356679
다음과 같이 JavaScript의 포커스 기능으로이 문제를 해결하는 가장 쉬운 방법 :
집에서 복사하여 사용해 볼 수 있습니다!
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<input id="input1" type="text" onkeypress="pressEnter()" />
<input id="input2" type="text" onkeypress="pressEnter2()" />
<input id="input3" type="text"/>
<script type="text/javascript">
function pressEnter() {
// Key Code for ENTER = 13
if ((event.keyCode == 13)) {
document.getElementById("input2").focus({preventScroll:false});
}
}
function pressEnter2() {
if ((event.keyCode == 13)) {
document.getElementById("input3").focus({preventScroll:false});
}
}
</script>
</body>
</html>
나는 비슷한 필요가 있었다. 내가 한 일은 다음과 같습니다.
<script type="text/javascript" language="javascript">
function convertEnterToTab() {
if(event.keyCode==13) {
event.keyCode = 9;
}
}
document.onkeydown = convertEnterToTab;
</script>
이 모든 경우에 Chrome과 IE에서만 작동하며이를 해결하기 위해 다음 코드를 추가했습니다.
var key = (window.event)? e.keyCode : e.which;
키 코드가 13이면 키 값을 테스트했습니다.
$('body').on('keydown', 'input, select, textarea', function (e) {
var self = $(this)
, form = self.parents('form:eq(0)')
, focusable
, next
;
var key = (window.event) ? e.keyCode : e.which;
if (key == 13) {
focusable = form.find('input,a,select,button,textarea').filter(':visible');
next = focusable.eq(focusable.index(this) + 1);
if (next.length) {
next.focus();
} else {
focusable.click();
}
return false;
}
});
$("#form input , select , textarea").keypress(function(e){
if(e.keyCode == 13){
var enter_position = $(this).index();
$("#form input , select , textarea").eq(enter_position+1).focus();
}
});
You could programatically iterate the form elements adding the onkeydown handler as you go. This way you can reuse the code.
참고URL : https://stackoverflow.com/questions/1009808/enter-key-press-behaves-like-a-tab-in-javascript
'program tip' 카테고리의 다른 글
두보기 사이에 내보기를 중앙에 배치하는 iOS 자동 레이아웃 (0) | 2020.11.14 |
---|---|
제출시 "바이너리가 iPhone 5에 최적화되지 않았습니다"(ITMS-90096) (0) | 2020.11.14 |
비밀번호없이 수동으로 사용자 로그인 (0) | 2020.11.14 |
ESLint의 "no-undef"규칙은 Underscore 사용을 정의되지 않은 변수라고 부릅니다. (0) | 2020.11.13 |
클래스 멤버 함수를 콜백으로 전달하려면 어떻게해야합니까? (0) | 2020.11.13 |