2013-02-28 9 views
0

단일 레코드의 데이터베이스에서 데이터를 편집하는 데 사용되는 PHP 생성 HTML 4 전환 페이지가 있습니다. 사용자는 변경 사항을 저장하거나 레코드를 삭제하는 두 가지 옵션이 있습니다. 컨트롤이있는 양식을 사용합니다 (일부는 숨겨 짐).Onclick 양식 제출

<form method="post" action="object_mod.php"><!-- this is another file --> 
<!-- inputs follow --> 

저는 두 가지 작업 즉, </FORM> 태그 전에 삭제하거나 내가 두 양식에 버튼을 제출 넣어 레코드를 저장 :

<input type="submit" id="btnDelete" value="Delete" onclick="javascript:deleteRecordConfirm();"> 

(I도없이 시도 :

<input type="submit" id="btnSubmit" value="Save"> 
<input type="submit" id="btnDelete" value="Delete"> 
</form> 

을 사용자가 삭제를 확인해야하기 때문에 나는 다음과 같은 onclick 이벤트를 추가 javascript:onclick="javascript:deleteRecordConfirm(); return true;") 양식을 제출하지 않습니다.

JS 기능은

function deleteRecordConfirm(){ 
    if(confirm('Are you sure to delete?')){ 
    document.getElementById("field_action").value=-1; 
    //document.forms[0].submit(); 
    return true; 
    } 
} 

field_action는 내가 기록을 삭제하기보다는 그것을 저장할 object_mod.php에 알 수 있도록 -1로 설정됩니다.

질문이 있으시면 이 양식이 삭제시 제출되지 않는 이유?

어쨌든 확인 없이도 사용자가 양식을 제출하지 못하게하는 것이 좋을 것 같습니다. 그래서 내가 <INPUT TYPE="submit">을 삭제에 사용합니다. 좋은 생각입니까? 두 개의 독립적 인 형식 (사실 삭제는 레코드 id가있는 숨겨진 필드가 하나만 있어야 함)을 삭제 단추와 저장 단추로 제공하는 것에 대해 생각하고있었습니다.

실제로이 페이지는 내가 신뢰하는 사용자와 함께 일종의 인트라넷에서 작동하며 해킹이나 무언가를 두려워하지 않지만 보안 설명도 환영합니다.

(Firefox 19.0에서 테스트했으며 Javascript 콘솔에는 오류가 표시되지 않습니다. w3c 유효성 검사기가 올바른 페이지라고 말합니다.)

+2

작성된이 게시물은 stackoverflow의 질문 및 답변 형식에 적합하지 않습니다. 위의 # 1에 질문이있는 경우 명확하게 묻는 것이 좋습니다. 다른 항목은 다른 질문으로 남겨 두십시오. –

+0

그래, 내가 편집 할게. 죄송합니다 – Voitcus

답변

1

양식은 귀하의 코드에 따라 제출해야합니다. 내가 알아챈 유일한 것은 />으로 입력 태그를 종료해야한다는 것입니다.

하지만 ... 이렇게하면 확인을 취소해도 양식이 제출됩니다.form.onsubmit 처리기를 사용하고 false를 반환하면 양식이 제출되지 않습니다.

@ B3aT의 대답은 무조건 "외부화"하는 최선의 방법이 아니라고 생각하지 않습니다. 많은 것이 가장 간단합니다.

+0

문제는 document.forms [0] .submit()을 넣을 때만 제출하지 않는다는 것입니다. 그래서 내가 원하는대로 작동하지만 왜 내가 이것을 필요로하는지 모르겠다. ... – Voitcus

+0

그리고 나는 코드를보고, 양식을 제출해야한다고 말했다. 사실, 나는 심지어 [피들] (http://jsfiddle.net/tYqj9/6/)을 만들었습니다. 입력을 제대로 종료 했습니까? – marekful

+0

예. 위에서 나는 복사/붙여 넣기를하지 않고 입력했다. 두 입력 모두''이다. 코드가 실행됩니다 ('confirm()'이 표시됩니다). DTD는''AFAIR은 그렇지 않습니다. 그러한 종결을 요구하지만, 나는 그것을 당신의 방식으로 행하는 습관이 있습니다. – Voitcus

1

가장 좋은 방법은 실제 양식 게시를 "외부화"하는 것입니다.

// 자신의 기능 (저장 및 삭제) 당신이 당신의 논리를 완료 한 후에 // 또 다른 해결책라는 체크 박스를 추가하는 것입니다 document.forms["myform"].submit();

"삭제합니까 호출 // 일반 버튼 (제출하지) 을 "저장"버튼의 이름을 "완료 또는 수행"으로 변경하십시오. 그리고 서버 측에서 "삭제"가 활성화되면 삭제하십시오.

일반적으로 "삭제"는 "항목 별"수준 (동일한 사용자가 여러 레코드가 있어야 함)이므로 별도의 버튼/링크를 만들고 결국 ajax 요청을 수행하거나? delete = 1을 사용하여 URL에 액세스해야합니다. & id = 3.

사용자 정의 예/아니요 창을 만들거나 jQuery 플러그인을 사용해야합니다. 브라우저 표준은 "확인"입니다.

+0

맞습니다. 사용자가 Javascript를 비활성화 한 경우이 field_action은 -1로 설정되지 않으므로 사용자가 확인란을 변경하면 확인란이 항상 작동합니다. 'confirm'에 대한 답변을 주셔서 감사합니다. – Voitcus

0

괜찮 았는데, 실제로 이것은 매우 어리석은 실수였습니다. 문제는이 버튼이 양식 외부에 있기 때문에 발생했습니다. 나는 내가 PHP 코드를 리뷰하지 않았지만 HTML 코드가 아니라 스크립트에서 모두 복사해야한다고 확신했다.

나는 정확하게이 라인을 이해했지만, 폼을 제출 한 버튼 이었기 때문에 document.form[0] 오브젝트 자체가 아니기 때문에 아니다.

답장을 보내 주셔서 감사합니다. 나는이 form.onsubmit 힌트를 Marcell에서 시도 할 것입니다.