2012-08-29 2 views
0

양식을 사용하면 사용자가시를 제출할 수 있습니다.양식 버튼 onClick을 비활성화 한 다음 양식을 제출하십시오.

가끔은 해당 페이지에 새로운 사용자 이름 필드가 있습니다 (아무도 로그인하지 않은 경우). 이 경우 버튼 클릭을 우선 적용하여 우선 서명합니다.

$('#submit-poem').click -> 
    $('input[type=submit]').attr('disabled', true) 
    if $('#new_poet_name_field').length 
    signUp(); // This will submit the poem form after registering 
    false 
    else 
    console.log("A poet was already logged in!") 
    true 

잘 작동하는 데 사용됩니다. 그러나 이제는 new_poet_name_field이 없으면 제출 단추가 비활성화 된 상태로 유지됩니다. 돌아 오는 true이 양식을 제출하는 데 사용되었습니다. 이제 poet_name_field이없는 경우 명시 적으로 $('#new_question')[0].submit()을 수행해야합니다.

true이 반송되면 양식을 제출하지 않는 이유는 무엇입니까? 내 해결 방법은 걱정 스럽습니다. 양식이 지금 두 번 제출 될 수도 있습니다. 즉, 명시 적으로 제출할 때와 한 번 true이 반환 될 때입니다.

+0

관련성이 없지만 "입력"또는 다른 키를 사용하여 제출하고 귀하의 클릭을 우회하는 위험이 있습니다. 양식의 "제출"이벤트에 연결하여 false/true를 반환하는 것이 더 낫습니다. –

+0

HTML을 보여주십시오. 제출할 때 양식이없는 이유는 무엇입니까? – Starx

답변

1

'submit'양식에 바인딩하고 preventDefault/return false를 사용하면시를 제출하는 대신 다른 사람이 서명하도록 할 수 있습니다. 이렇게하면 버튼을 비활성화/활성화 할 필요가 없습니다.

+0

제출 이벤트에 대한 바인딩이 작동했는데, 그것이 파산되기 이전의 방법이었습니다! – bevanb

0

나는 양식이 없다는 생각을 싫어합니다. 무효이며 HTML의 사양을 따르지 않아야합니다.

모든 건설적인 양식 요소는 양식 태그 안에 포장해야합니다. 하나 이상의 양식으로 양식 제출을 제어 할 수 있습니다.


사용하는 코드는 끔찍

  1. ? 제출 버튼이 두 개 이상 있습니까? 아래의 코드는 페이지의 모든 제출 버튼을 비활성화합니다. 다른 버튼도 사용할 수 있습니다.

    $('#submit-poem').click -> 
        $('input[type=submit]').attr('disabled', true) 
    
  2. 제출의 진위 여부를 확인하는 것은 잘못된 방법이며, 방화범 같은 도구로 쉽게 조작 할 수 있습니다.

    if $('#new_poet_name_field').length 
        signUp(); 
    

만약 사용자가 로그인하거나 중요한, 당신은 빨리 당신에게 정보를 얻는 서비스 페이지에 아약스 요청을 보낼 수없는 경우 찾는

$('#submit-poem').click(function() { 
    $(this).attr('disabled', true) 
    $.post("yourservicepage.php", {}, function(data) { 
      // RE suppose, data is the boolean value from server indicating logged in or not 
      if(data != true) { 
      signup(); //if not logged in then signup 
      } 
      //... 
    }); 
}); 
+0

너무 명확하지 않았습니다. 항상 '시'의 형식이 있습니다. 내가 의미하는 바는'poet_name'을위한 필드가 때때로 존재한다는 것입니다 (아무도 로그인하지 않았다면). – bevanb

+0

@bevanb, JS가 아닌 서버의 SESSIONS를 기준으로 누군가가 로그인했는지 확인하십시오. – Starx

관련 문제