2016-07-06 2 views
1

흥미로운 사례가 있습니다. 태그 입력 필드에 this plugin을 사용하고 있습니다. 입력을 클릭하여 태그 필드에 태그를 추가하면 양식이 제출됩니다.jQuery preventDefault issue

$(document).ready(function() { 
    $(window).keydown(function(event){ 
     if(event.keyCode == 13) { 
      event.preventDefault(); 
      return false; 
     } 
    }); 
}); 

을 내가 누르면 이제 필드에 새 태그를 만들지 않습니다 태그 입력에 입력 : 그래서 내가 제출에서 양식을 방지하기 위해 아래 코드를 넣습니다. 기본 입력 동작은 태그 플러그인에서 사용됩니다.

플러그인을 변경하지 않는 방법이 있습니까?

+1

이벤트 전파를 중지하므로'return false; '를 제거하십시오. 'preventDefault()'만으로도 제출 양식을 멈출 수 있습니다. –

+0

의견을 보내 주셔서 감사합니다. 그것은 작동하지 않았다. 양식 제출을 막고 태그 플러그인도 입력합니다 –

+0

McCrossan 씨가 제안한대로'return false '를 제거한 다음'event.preventDefault()'를'if (event.keyCode == 13) {. .' – zer00ne

답변

0

event.target을 사용하여 keydown 이벤트가 발생한 위치를 확인할 수 있습니다.

$(document).ready(function() { 
    $(window).keydown(function(event){ 
     if(event.keyCode == 13 && !$(e.target).is("input[name=fieldName]")) { 
      event.preventDefault(); 
      return false; 
     } 
    }); 
}); 
0

것은이는 form 이벤트 리스너를 처리하기 전에 window 이벤트 리스너의 점에 관해서 결코 여기있다, 예를 들면 : 제출합니다. 이벤트가 항상 dom에 뜬다. 따라서 form은 항상 window 앞에옵니다. 따라서 window 이벤트와 관련하여 기본값이 이미 form에 대해 발생했기 때문에 기본값을 방지하는 데 도움이되지 않습니다. keydown 수신기를 form에 추가하면 올바르게 작동합니다.

편집 : 또는 더 정확하기 때문에 더 좋음 - 제한하려는 필드에만 keydown 수신기를 추가하십시오.

0

나는 해결책을 발견 :

$(document).ready(function() { 

    $('#form-content').on('submit',function(event, can_submit){ 
     if(!can_submit){ 
      event.preventDefault(); 
     } 
    }) 
}); 

function formSubmit() { 
    $('#form-content').trigger('submit', [true]) 
} 

그럼 내가 저장 버튼으로 링크를 사용하십시오 답변

<a class="btn btn-primary btn-lg btnSubmit" onclick="formSubmit()" >{% trans "Save" %}</a> 

감사합니다!