2012-09-07 1 views
0

양식 제출 이벤트 핸들러에 문제가 있습니다. 여기에 내가 jQuery를 1.4.2Jquery 1.4.2 양식 제출 이벤트 핸들러가 IE 7/8에 양식 제출 후 실행 중입니다.

<FORM id="mysearchform" method="get" action="http://www.abc.com/results.aspx?q=" target=_blank sizcache="1694" sizset="0" jQuery1347023310528="3"> 

<DIV class="search"> 
<span><span> 
<LABEL class=hide for=q>Search:</LABEL> 
<INPUT accessKey=S id="a" class="abc" name="a" maxLength="50" value="Images" size=69 type="search" autocomplete="off" selectionStart="0" jQuery1347023310528="108"> 
<INPUT style="WIDTH: 185px; HEIGHT: 33px" class="img" title="Search" alt="Search" value="Search" src="http://dummyimage.com/180x35" type=image> 
<INPUT name="form" value="abcd" type="hidden"></SPAN></SPAN></DIV> 
</FORM> 

내가 폼 입력 요소 및 ID 텍스트 상자의 값의 값을 변경하는 데 사용됩니다 mysearchform에 대한 하나의 이벤트 핸들러를 사용하고 내 코드 이다 "는"양식 있도록 나는 텍스트 상자 즉,의 값을 변경할 수 있습니다 제출할 내가 "A"및 양식 입력 요소에 대한 값을 변경하고, mysubmitHandler에서

$("#mysearchform").submit(mysubmitHandler); 

(추가 값을 추가). 이 코드는 IE9, FF 4.0 및 최신 크롬 버전에서 잘 작동합니다. 그러나 IE 7과 IE8에서는 "mysubmitHandler"에 오기 전에 새로운 창이 열리고 있습니다 (새 창에서 검색 결과를 보여줍니다). 그래서 내 변경 사항은 검색 창에 쿼리 문자열에 추가되지 않습니다.

다른 브라우저에서는 "mysubmitHandler"가 먼저 실행되고 새 창이 열립니다.

+1

당신이 당신의 jQuery 코드를 게시 할 수 다음은 문제를 해결 무엇을 내 설정에? –

+0

var searchForm = $ ("# mysearchform"); searchForm.submit (onSubmit); function onSubmit() { var $ formElement = $ ("input [name = form]", $ (this)); $ formElement.attr ("value", ($ ("# a"). val() + "search")); } 그러나 양식 제출 후이 코드는 중요하지 않습니다. 말하자면, 새 페이지가 탭에서 열리고 내 처리기가 호출되는 것을 의미하며 이는 내 변경 사항을 반영하지 않습니다. –

+0

jQuery 1.4.2, 복고풍 스타일 .... – Gabe

답변

0

문제가 재현되었습니다.

(I 변경 어떤 코드에서 댓글)

// Wrapped everything in jquery onready event function $(function() { }) 
$(function() { 
    var $searchForm = $("#mysearchform"); 

    function onSubmit() { 
     var $formElement = $("input[name=form]", $(this)); 
     $formElement.attr("value", ($("#a").val() + "search")); 
    } 

    // Put the handler *after* the function definition 
    $searchForm.submit(onSubmit); 
}); 
+0

시도해 보았지만 제대로 작동하지 않았습니다. 그 폼에 다른 작업을하는 4 개의 이벤트 핸들러가 추가되었습니다. 모든 처리기가 시작되지만 새 탭이 열립니다. 모든 처리기를 선언문 위에 올릴 수는 없습니다. IE 8 및 7에서만 작동하지 않는 특별한 이유가 있습니까? IE 9 및 다른 최신 브라우저에서 완벽하게 작동 –

+0

미리 핸들러 함수를 선언 할 수없는 이유는 무엇입니까? 코드를 테스트하기 위해 필자는 IE7에서 작동하지 않는 http://jsfiddle.net/3VvEk/를 사용했으며 onSubmit이 정의되어 있지 않기 때문에 'JSLint'를 클릭해도 유효성을 검사하지 않습니다. 선언 후에 이벤트 처리 코드를 넣으면 jsfiddle이 유효성을 검사하고 * 및 *를 IE7에서 작동합니다. – Pandaiolo