2012-01-04 4 views
13

필자는 .preventDefault를 추가하기 전에 2 개의 jQuery 스크립트를 가지고 있으며, .preventDefault를 추가 한 후에는 동일한 스크립트의 복사본을 가지고 있습니다. jQuery를 초기에 작동하지만 내가 .preventDefault()jQuery .preventDefault();

작동하지 않습니다

$(window).load(function(){ 
     $(document).ready(function(){ 
     $("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each 
      if ($(this).text() == "Yes") { //test value returned from non-input field 
       clearID(); 
       $("tr.anon").hide(); 
      } else { 
       $("tr.anon").show(); 
      } 
     }); 
     if ($("select[title='action']").val() == "") { 
      $("tr.actDet").hide();  
     } 
     $("select[title='organizationalElement']").focusout(function() {   
      if ($(this).val() === "I don\'t know") {    
      alert("If no organizational element is selected, additional time may be required to route this request");   
      } // close if  
      $("select[title='action']").change(function(){   
       $(".actDet").toggle($(this).val()!= "");  
      }); // close action.change 
     });//close select.focusout 
     }); // close doc.ready 
    }); // close window.load 

스크립트를 작동

초기 스크립트 ...

$(window).load(function(){ 
    $(document).ready(function(){ 
    $("span[id$='_ff5_1']").each(function() { //returns a collection of elements that must be iterated through using each 
     if ($(this).text() == "Yes") { //test value returned from non-input field 
      clearID(); 
      $("tr.anon").hide(); 
     } else { 
      $("tr.anon").show(); 
     } 
    }); 
    if ($("select[title='action']").val() == "") { 
     $("tr.actDet").hide();  
    } 
    $("select[title='organizationalElement']").focusout(function() {   
     if ($(this).val() !== "I don\'t know") { 
     $(this).preventDefault(); 
     } else {    
     alert("If no organizational element is selected, additional time may be required to route this request");   
     } // close if  
     $("select[title='action']").change(function(){   
      $(".actDet").toggle($(this).val()!= "");  
     }); // close action.change 
    });//close select.focusout-- close edit record stuff 
    }); // close doc.ready 
}); // close window.load 

유일한 변화를 추가 한 후 내가 만든 없습니다 초기 if 문이 .preventDefault()를 호출하는 if/else가됩니다. 첫 번째 스크립트는 훌륭하게 작동하지만 두 번째 스크립트는 실패합니다. 왜? organizationalElement의 값이 기존 레코드의 idk 인 경우 .preventDefault() 메서드를 호출합니다.

앤드류가 : 당신의 편집에 명확히하기 위해 ... 나는 내 스크립트를 수정해야 ...

if ($(this).val() !== "I don\'t know") { 
    $(this).click(function(e) { e.preventDefault(); }); 
    } else {    
    alert("If no organizational element is selected, additional time may be required to route this request");   
    } // close if 

... B/C 내가 변경하는 경우 제대로 작동 taht를 언급 $ (this) .preventDefault(); ~로 e.preventDefault();

$ (this) 객체에 메서드를 첨부하고 싶다면 실제로 작성하는 방법을 보여 주시겠습니까?

답변

31

당신은 preventDefault이의 기본 동작을 방지주의, 그냥 완성도, 이벤트 객체에 this

$("select[title='organizationalElement']").focusout(function(e) {   
    if ($(this).val() !== "I don\'t know") { 
    e.preventDefault(); 
    } 
}); 

preventDefault을하지 호출 할이 요소 - 탐색의 값으로 페이지를 예를 들어, 앵커의 href 속성 (select의 포커스 아웃에 대한 기본 액션이 무엇인지 또는 심지어 포커스가있는 지 여부는 확실하지 않음). preventDefault 거품을 방지하지 않습니다.

버블 링에 신경 쓰면 jQuery 이벤트 핸들러에서 false를 반환하면 기본 동작을 방해하고 버블 링을 방지해야합니다.

+0

감사합니다.preventDefault가 이벤트가 버블 링되는 것을 멈추지 않는다는 것을 알고 있지만 버블 링을 원하지 않는다고 확신하지는 않습니다. 아마도 jQuery 스크립트 전체가 작동하지 않게 된 것일까? – jg100309

+2

@ jg100309 아니요, 원래 문제는 이벤트 객체 대신 preventDefault를 호출하는 것이 었습니다. 이벤트 객체를 처리기에 전달하고 내 응답 –

+1

과 같이 * it *에 preventDefault를 호출하십시오. * 참고 : 두 개의'''사이에있는 경우'''문자를 이스케이프 할 필요가 없습니다. * – SeinopSys

8

기능은 이벤트와 연관됩니다. 당신이 호출해야하는 것은 : 당신에 대한 자세한 내용을보실 수 있습니다

$('selector').click(function(e) { e.preventDefault(); }); 

: 귀하의 의견에 따라 명확히하기 위해

e.preventDefault(); 

편집, 당신은 함수 호출에 변수로 e를 추가해야 jQuery preventDefault 페이지에서 확인하십시오.

+0

그래, 그래서 항상 e.preventDefault()가됩니다. – jg100309

4

preventDefault 메서드는 DOM 개체가 아니라 이벤트 개체에 적용되어야합니다.

코드는해야한다 :

$("select[title='organizationalElement']").focusout(function(e) {   
     if ($(this).val() !== "I don\'t know") { 
     e.preventDefault(); 
     } else {    
     alert("If no organizational element is selected, additional time may be required to route this request");   
     } // close if  
     $("select[title='action']").change(function(){   
      $(".actDet").toggle($(this).val()!= "");  
     }); // close action.change 
    });//close select.focusout-- close edit record stuff 

가 도움이되는지 알려주세요!

관련 문제