2011-12-21 6 views
3

양식을 제출하는 링크를 만들려고합니다. 제출 입력 요소 submit의 이름을 어떻게 지정하면 더 이상 링크가 작동하지 않습니까?jQuery와 함께 작동하지 않습니다 <a>

//breaks form submission 
<input type="submit" value="Submit" name="submit" /> 

//does not break form submission 
<input type="submit" value="Submit" name="xsubmit" /> 

Chrome에서 다음과 같은 오류가 발생합니다.

<p>Type 'correct' to validate.</p> 
    <form method="post" enctype="multipart/form-data"> 
    <input type="submit" value="Submit" name="xsubmit" /> 

    <a id="btn_submit"> 
     <span id="txt_submit">Submit</span> 
    </a> 
    </form> 

<script> 

$("#btn_submit").click(function() { 
    $("form").submit(); 
    }); 

    $("form").submit(function() { 

    }); 
</script> 
+0

. ''코드를 보여 주시겠습니까? – Bojangles

+0

name = "submit"은 나를 위해 Chrome에서 작동합니다. 어떤 브라우저를 사용하고 있습니까? - @JamWaffles 같은 코드가 아닙니다. xsubmit 대 버튼의 name 속성 전송. –

+1

@JamWaffles - 나는 이상한 것을보고있다. 그의 더블 코드 포스트는 유효한 포인트를 제시합니다. 이 바이올린을보십시오. 양식 제출은 객체 # 의 속성 'submit'이 함수가 아닙니다. http://jsfiddle.net/r4cLW/1/ (Chrome15 여기)와 함께 실패합니다. 제출 단추의 이름을 xsubmit으로 변경하면 더 이상 발생하지 않습니다. – mrtsherman

답변

12

"제출"은 예약어입니다. 그것은 자바 스크립트와 충돌합니다. 입력의 이름을 다른 것으로 변경하십시오. 방법 submit()에 jQuery를 문서에서

: 당신은 두 번 같은 코드를 게시 한

Forms and their child elements should not use input names or ids that conflict with properties of a form, such as submit, length, or method. Name conflicts can cause confusing failures. For a complete list of rules and to check your markup for these problems, see DOMLint.

+0

예약어 또는 잠재적 인 예약어 목록에 없습니다. https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words – mrtsherman

+1

나쁘다. js가 아닌 jQuery와 충돌합니다. 양식 및 해당 하위 요소는 제출 양식, 길이 또는 방법과 같이 양식 속성과 충돌하는 입력 이름 또는 ID를 사용하지 않아야합니다. 이름 충돌은 혼동을 야기 할 수 있습니다. http://api.jquery.com/submit/ – Fenec

+0

나는 이것이 이상한 행동으로 이끌고 있다고 생각하지만 확실한 대답은 아닙니다. 여기에 정의 된 자바 스크립트 "키워드"입니다. http://www.quackit.com/javascript/javascript_reserved_words.cfm – Vigrond

5

두 변경 일하고

<p>Type 'correct' to validate.</p> 
    <form method="post" enctype="multipart/form-data"> 
    <input type="submit" value="Submit" name="submit" /> 

    <a id="btn_submit"> 
     <span id="txt_submit">Submit</span> 
    </a> 
    </form> 

<script> 

$("#btn_submit").click(function() { 
    $("form").submit(); 
    }); 

    $("form").submit(function() { 

    }); 
</script> 

작동하지

Uncaught TypeError: Property 'submit' of object #<HTMLFormElement> is not a function 

:

$(function() { 

$("#btn_submit").click(function(e) { 
    e.preventDefault(); 
    $("form").submit(); 
    }); 

    $("form").submit(function() { 

    }); 

}); 

첫째, document.ready 처리기에서 바인딩을 포함 $(function() {...});,536,둘째, 일반 앵커 기능을 중지하려면 이벤트에 preventDefault 호출을 추가하십시오.

+0

'$ (document) .ready()'에서 실제로 바인딩 할 필요는 없습니다. 또한, 나는 당신과 같은'e.prevenDefault()'해결책을 가진 나의 대답을 게시하는 데 약 20 초가 걸렸다. 그래서 +1! – Bojangles

+0

".live()"또는 ".on()"을 사용하지 않고 문서를 바인딩 할 필요가 있습니다. 왜냐하면 이벤트 바인딩을위한 호출이 실행될 때 요소가 DOM에 아직 존재하지 않으므로 아무 것도 실제로 바인딩하지 않습니다. –

+0

좋은 지적. 나는 모든 스크립트를 내 페이지의 맨 아래에 두는 것을 잊어 버렸습니다. – Bojangles

관련 문제