입력 키에서 양식 제출 금지
입력 키가 각도로 폼을 제출하지 않도록 하려면 어떻게 해야 합니까?
ID x의 버튼에서 송신하지 않는 한, 13키를 잡아 무효로 하거나 폼을 무효로 하는 방법이 있습니까?
감사해요.
에 'ng-click'을 사용할 .<button type="button">
폼 태그 안에서도 사용할 수 있습니다.은 "Default Behavior"입니다.type="submit"
이치노Javascript!
이미 다른 유저로부터, 「버튼 타입="버튼"이 문제의 원인이 된다고 써져 있습니다.참고: 유형="..." 선언이 없는 버튼은 기본적으로 "선택"입니다!따라서 항상 type="버튼"을 사용하십시오.
몇 시간 후, 이 이상한 코드가 유일하게 작동했다.
난 더 나은 답을 기다리고 있어. 이 괴물을 받아들이지 않을 거야.
app.directive('onKeyup', function() {
return function(scope, elm, attrs) {
var allowedKeys = scope.$eval(attrs.keys);
elm.bind('keydown', function(evt) {
angular.forEach(allowedKeys, function(key) {
if (key == evt.which) {
evt.preventDefault(); // Doesn't work at all
window.stop(); // Works in all browsers but IE
document.execCommand("Stop"); // Works in IE
return false; // Don't even know why it's here. Does nothing.
}
});
});
};
});
모든 양식 입력에 대해 다음을 사용하여 트리거합니다.
<input on-keyup="bla" keys="[13]" .... />
현시점에서는 사용자가 Enter 키를 누를 때마다 창이 전송을 시도하고 전송에 실패합니다.사일런트하지 않습니다.못생겼지만 효과가 있다.
편집: 키 다운이 요소 바인딩에 대한 키 업보다 약간 우수합니다.이제 Enter 키는 사일런트하게 실패합니다.
아주 간단해서 아무것도 할 필요가 없어각도 +2를 사용하는 경우 폼태그에 추가합니다.
<form (keydown.enter)="$event.preventDefault()" ...>
폼이 단일 요소에만 전송되지 않도록 하려면 다음 ng-keypress 핸들러를 추가할 수 있습니다(이는 Angular 1.x용).
<input type="text" name="myField" ng-keypress="keyPressHandler($event)"/>
「」에 대해서, 하면,keyPressHandler
:
$scope.keyPressHandler = function(e) {
if (e.keyCode === 13) {
e.preventDefault();
e.stopPropagation();
// Perform your custom logic here if any
}
}
저도 비슷한 문제가 있어서 결국 양식에서 단추를 뺐어요.내가 사용하는 것을 보면ng-click
모든 이 다 같이 있어요.ng-model
형태 안쪽에 있든 없든 상관없습니다.
나는 이것이 나쁜 관행이라는 것을 알지만 그것은 확실히 키 입력을 가로채는 커스텀 지시문을 쓰는 것보다 낫다.
체크해 주세요.
입력 필드가 2개 이상이고 버튼이나 입력이 없는 경우 [type=submit]를 눌러도 전송이 트리거되지 않습니다.
입력 2개 에는 2개 이상의 필드를 할 수 .<span ng-click="submit()">Sumbit</span>
이러한 입력 필드에 키를 트리거하지 않도록 합니다.
나는 이 문제를 우연히 발견했다.예, 페이지에서 모든 type='button'을 제거하고 다른 버튼에 type="button"이 있는지 확인해야 합니다. 하지만 여전히 정상 유효성 검사 제출을 사용할 수 있습니다.
나는 검증을 위해 제출 + 양식 상태를 트리거하는 지시문을 작성했습니다.교환:
<button type="submit">
와 함께
<button submit-button type="button">
지시:
export default /*@ngInject*/ function submitButton($log) {
return ({
require: '^form',
link: link,
restrict: 'A'
});
function link(scope, element, attributes, formCtrl) {
element.on('click', clickHandler);
function clickHandler() {
formCtrl.$setDirty(true);
formCtrl.$setSubmitted(true);
angular.element(element[0].form).triggerHandler('submit');
$log.info('Form Submitted');
}
}
송신 버튼에 초점을 맞추면, ENTER 를 눌러 송신할 수 있기 때문에, UX 와 액세스 용이성에 있어서도 좋다고 생각합니다.
제가 찾은 가장 쉬운 해결책은 제출 대신 입력 유형을 버튼으로 사용하고 폼 태그에 ng-submit을 사용하지 않고 폼 제출 기능을 ng-click으로 바인드하는 것입니다.
이게 도움이 됐으면 좋겠어요.
이것은 나의 이상하지만 지시 없이 빠르고 간단한 해결책이다.
HTML:
<form ng-submit='submitForm()'>
<input type='text'>
<button type='submit' ng-mousedown='doSubmit=true'>submit</button>
</form>
컨트롤러:
$scope.submitForm = function() {
if (!$scope.doSubmit) {
return;
}
$scope.doSubmit = false;
console.log('execute some actions');
}
폼 태그의 ng-submit을 사용하여 컨트롤러에서 기본 폼 제출을 가져올 수 있습니다.이것에 의해, 다음과 같이 송신되지 않게 됩니다.
http://docs.angularjs.org/api/ng.directive:ngSubmit
또는 주요 이벤트를 꼭 포착하고 싶은 경우 이벤트를 통과하는 지시사항을 stop이라고 부를 수 있습니다.
http://docs.angularjs.org/api/ng.directive:ngKeyup
angular.element(document).ready(function () {
angular.element(window).keydown(function () {
if(event.keyCode == 13) {
event.preventDefault();
return false;
}
});
});
angularjs 컨트롤러에서 사용해 보십시오.
폼 내의 컨트롤에 포커스가 있을 때 Enter 키를 누르면 폼이 전송됩니다.ng-submit을 사용하여 리스너를 등록하면 이를 대행 수신하고 기본 설정 방지 기능을 사용하여 기본 프로세스(예: 폼 제출)를 중지할 수 있습니다.이것 좀 봐
다음은 작동해야 합니다. 즉, 양식은 버튼을 클릭할 때만 전송되고 누를 때는 전송되지 않습니다.Enter
를 누릅니다.(이것은, 반응하는 형태에 확실히 유효합니다.템플릿 폼에 대해서는 테스트하지 않았습니다).
<form #form [formGroup]="form" METHOD="GET" action="http://localhost:3000/test">
<input placeholder="Enter"/>
<input placeholder="The Dragon"/>
<button type="button" (click)="form.submit()">Submit</button>
</form>
물론 모든 Import 및 선언을 기억하십시오.
app.module.ts
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@NgModule({
imports: [
. . .
FormsModule,
ReactiveFormsModule
]
. . .
})
export class AppModule { }
test.component.ts
import { FormGroup, FormControl } from '@angular/forms';
@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.scss']
})
export class TestComponent {
form: FormGroup = new FormGroup({});
constructor() { }
}
[ Submit ]버튼을 클릭하여 폼 송신으로 설정되어 있는지 확인할 때 변수를 설정합니다.
$scope.click = function () {
$scope.clicked = true;
$scope.submit();
};
$scope.submit = function () {
if ($scope.clicked) {
... submit
} else {
... prevent defaults
}
$scope.clicked = false;
};
'jsfiddle' 참조
언급URL : https://stackoverflow.com/questions/19549985/prevent-form-submission-on-enter-key
'programing' 카테고리의 다른 글
기능 컴포넌트 내의 ReactJS 라이프 사이클 방법 (0) | 2023.03.06 |
---|---|
Microsoft Excel의 인셀과 루프 모두에서 정규 표현(Regex)을 사용하는 방법 (0) | 2023.03.06 |
Spring Boot 2.0.0, Data Source Builder를 autoconfigure jar에서 찾을 수 없습니다. (0) | 2023.03.06 |
URL에서 #pretty photo를 삭제하는 방법 (0) | 2023.03.06 |
스프링 부츠: 앱을 시작하지 않고 리퀴베이스 이행 실행 (0) | 2023.03.06 |