2009-09-16 2 views
0

어플라이언스와 유사한 제품의 웹 GUI에서 작업하고 있습니다.form.submit()을 호출 할 때 "성공적인"버튼을 생성합니다.

잘 작동하는 HTML 폼이 있습니다 : 체크 박스가있는 목록을 표시하고 사용자가 일부를 확인한 다음 양식을 제출하는 "제거"버튼을 클릭합니다. 서버는 POST를 가져 와서 항목을 제거하고 페이지를 새로 고칩니다. 괜찮아.

"정말입니까?" 양식에 대한 확인. 나는 FORM 태그의 태그의 onsubmit 방법 또는 제출 버튼 태그에 온 클릭으로

confirm("are you sure?"); 

에 전화를 추가하는 경우, 그것을 잘 작동하지만 추한 브라우저 기본 확인 대화 상자를 사용합니다.

다른 곳에서 우리가 내가 사용하고 싶은 멋진 사용자 정의 CSS 스타일 확인 대화 상자가 제품에

하지만이 같은 작품 : 적절한 장소에서, 당신은

myConfirm("Confirm", "Are you sure", "Yes", "No", confirmCallback); 

이 박았에 전화를 넣어 대화 상자를 사용자 지정하고 가운데에 표시 한 다음 거짓을 반환하고 양식이 제출되지 않습니다.

나중에 사용자가 결정할 때 "예"를 누르면 confirmCallback 함수가 호출됩니다. 다른 제품에서는 Ajax 기반의 제품 페이지가 정보를 수집하고 postBody를 생성하며 Prototype의 Ajax 객체를 사용하여 게시하고 모두 괜찮습니다. ("아니오", 다음 대화와 clickmask이 제거되면 상황이 계속합니다.)이 간단한 페이지에서

, 순수 HTML 양식, 나는이처럼 보이는 confirmCallback 기능이 있습니다

var confirmCallback = function() { 
    document.myForm.submit(); 
} 

을 OK를 발생 시키지만 양식이 제출되면 제거 단추가 이미 클릭되었으며 사용자 정의 확인 억제 제출에 의해 리턴 된 false가 리턴됩니다. 대신이 버튼은 새로운 제출으로 간주되고 제거 버튼은 실제로 클릭되지 않으므로 W3.org의 HTML 4 표준 섹션 17.13.3의 측면에서 "성공"하다고 간주되지 않습니다. 서버는 제거 단추가없는 데이터를 가져 와서 "알았어.하지만 네가 그걸로하고 싶은 걸 몰라."하고 다음 페이지를 제공하지만 아무것도하지 않습니다.

여기까지 읽으 셨다면 고맙습니다. 실제 질문은 여기에 있습니다. 어떻게 내 confirmCallback javascript 함수에서 크로스 브라우저 방식으로 제거 단추를 시작하고 "성공"하여 나머지 데이터와 함께 제출할 수 있습니까?

+0

글쎄, 이름이 "value"인 숨겨진 입력을 추가하는 것이 효과적이었습니다. 버튼을 눌렀을 때 서버가 속임수를 썼습니다. 이것은 여전히 ​​언급 된 문제를 해결하지는 않지만 폼이 꽤 확인하는 대화 상자로 작동하게합니다. 모두에게 도움을 주셔서 감사합니다. – Berry

답변

0

눌려진 버튼으로 가장하기 위해 숨겨진 필드가 필요하고 각 버튼에는 이름이 필요하지 않지만 대신 숨겨진 필드의 값을 조작하는 onclick 이벤트가 필요합니다.

버튼의 이름이 모두 다른 경우 DOM의 메소드를 사용하여 숨겨진 필드를 추가해야 할 수도 있습니다. 왜냐하면 모든 필드에 DOM에 추가 된 필드의 이름을 변경할 수 있다고 생각하지 않기 때문입니다. 브라우저.

JS가 없어도이 솔루션이 계속 작동하려면 JS 논리를 사용하여 좀 더 (초기 DOM 트리를 수정하고) 서버 코드를 수정해야합니다. "Are you sure"동작을 응답에 넣을 수도 있습니다 ...

+0

고마워요; 그게 바로 제가 끝내 준 것입니다. 그것이 일어날 때,이 제품을 위해 우리는 "no JS"사례를 고려할 필요가 없으므로 나는 잘 가야한다! – Berry

0

콜백에서 버튼의 onclick 핸들러를 제거하고 (확인을 유발 함) 버튼을 클릭하십시오. 이렇게하면 단추를 클릭하여 양식을 제출하고 단추 결과로 양식 데이터와 함께 제출을 다시 게시하게됩니다. 제거 버튼 다음 아마도 가장 쉬운 해결책은 양식을 제출 전화 사용자의 확인에 ID 다음

<form id="submitForm"... 

에게 양식을 제공하는 것입니다 그 양식 버튼을 제출하는 것을 가정

var confirmCallback = function() { 
    $('submitButton').stopObserving('click'); 
    $('submitButton').click(); 
} 
+0

흠, 흥미 롭습니다. 나는 그것을 시도 할 것이다. 감사. – Berry

+0

확인. 프로 : 양식이 더 이상 버튼없이 제출되지 않습니다. 단점 : 양식이 더 이상 제출되지 않았습니다. 이것은 올바른 접근 방법 인 것 같습니다. 나는 그것을 더 많이 사귀고 내가 작동하게되면보고 할 것이다. – Berry

+0

화재가 나는 프로토 타입에서 내가 기대하는 것을하지 않을 수 있습니다. 나는 jQuery로 옮겼고 나의 기억은 조금 어렴풋했다. 기본 요소를 가져 와서 클릭()해야 할 수도 있습니다. – tvanfosson

0

document.getElementById("submitForm").submit() 

나는 그것이 당신이 요구하는 것을 할 것이라고 생각하지만, 당신이 이미 그 해결책에 꽤 많은 것처럼 보였습니다. 그래서 당신이 다른 것을 요구한다면, 저에게 알려주십시오.

+0

그건 내가하고있는 일이다. 문제는 내 콜백을 호출 할 때 폼에 "reset"이 있고 더 이상 "clicked"버튼을 고려하지 않고 서버가 POST 데이터에서이를 볼 수 없다는 것입니다. 그래도 응답 주셔서 감사합니다. – Berry