2013-03-11 2 views
0

사용자가 변경할 수있는 페이지에 꽤 많은 입력 요소가 있습니다. 나는 양식을 제출하고 싶지 않습니다. 사용자가 요소 중 하나의 값을 변경 한 후에 데이터베이스 값을 변경하기 만하면됩니다.ajax를 통해 데이터베이스의 개별 폼 요소 값을 업데이트 하시겠습니까?

현재 각 입력에 포커스 아웃을 바인딩하는 중입니다. 이것은 보통 (페이스 북, 등 ..) 완료되는 방법입니까?

$('input').focusout(function() { 
    var current_val = $(this).val(); 
    var preset_val = $(this).attr('rel');//attribute set with original value 
    if (current_val !== preset_val) { 
       alert ('Value changed.');//where I would post to php page to update database 
      } 
    });" 
+1

'[on] change' 이벤트가 있습니다. 모든 브라우저에서 테스트 해보십시오. –

+0

질문을 이해할 수 있을지 모르겠지만 코드 검토를 원하십니까? 데이터 바인딩이 작동하는 방식과 자바 스크립트 데이터 바인딩 기법이 매우 광범위합니다. AngularJS, Knockout.js 및 Ember를 확인하십시오.이 3 가지 유형의 라이브러리를 구현하는 큰 라이브러리입니다. –

+1

예,이 작업을 직접 수행하며이 방법을 사용합니다. 모든'input : text'에'blur' 이벤트를 묶고 현재 값이 원래 값과 다르면 Ajax 함수를 호출합니다 :'$ (this) .attr ('defaultValue')! = $ (this). val()' – JoDev

답변

1

"일반적으로"하는 방식은 사용자가 단추를 클릭하여 변경 사항을 저장하거나 커밋 할 때까지 대기하는 것입니다. 각 변경 사항을 업데이트하려면 사용자에게 변경 사항을 명확하게 전달해야합니다.

사용할 적절한 이벤트는 변경 사항을 캡처하는 데 얼마나 적극적인지에 따라 결정됩니다. 키 스트로크 업데이트마다 keyup이 입력에 적합하고 선택 및 라디오/체크 박스에 대해서는 click이 적합합니다. 덜 공격적인 것은 blur 또는 change입니다.

가능한 변경 사항을 캡처하는 데 매우 능동적 인 방법 중 하나는 clickkeyup을 양식 요소 자체에 첨부하는 것입니다. 이렇게하면 모든 요소에 리스너를 추가하는 오버 헤드를 줄일 수 있습니다. 양식에서 이벤트가 발생할 때마다 a) 원래 대상을 확인하거나 b) 전체 양식을 작성하거나 c) 모든 요소를 ​​반복하고 변경 사항을 감지하고 ajax 필드 만 변경하십시오.

onbeforeupload 또한 창을 닫은 경우에도 양식의 최종 확인을 수행하는 데 사용할 수 있지만 이는 너무 지나치게 빠를 수 있습니다.

문서

+0

'click' 이벤트는 ''요소, 라디오 버튼 또는 체크 박스에 대해 * 결코 * 적합하지 않습니다. 키보드를 통해 변경하는 사용자는 반응하지 않으며 '변경'을 사용하지 않아도됩니다. 텍스트 입력과 달리 이벤트가 실행되는 시점에는 차이가 없습니다. –

+0

@AnthonyGrist 내가 말했듯이, 그것은 당신이 얼마나 공격적이 되느냐에 달려 있습니다. 양식의 모든 활동을 감지하는 데 지나치게 적극적으로 참여하려면 click 이벤트를 사용하지 않아도됩니다. 사실, 전체 spaz가되고 싶다면 클릭 수 및 키 업 이벤트를 양식 자체와 AJAX 모든 필드에 적용 할 수 있습니다. –

+1

감사합니다. 난 그냥 사용자에게 프로세스를 정의하지 않고이 일을 많은 사이트를 참조하십시오. 지금은 꽤 일반적입니다. – TDave00

관련 문제