2010-01-20 6 views
3

현재 집에서 만든 100 % Javascript CMS를 사용하고 있습니다. 문제가 많습니다. 사용자가 편집 할 수있는 일부 편집 가능 영역은 href 링크에 포함되어 있습니다. 이 href는 편집 할 수 없지만 사용자가이 영역을 클릭하면 (에디션 모드에서는) 브라우저가이 링크를 따라갑니다.JQUERY href 사용 중지 문제

우선, CMS에 의해 생성 된 HTML을 heres의 예 : 여기

<span id ="8a8b8d2e262bde2d01262c08317c000c" class="document"> 

    <a href="/actions/ecommerce/viderSelectionPalierEtVitrine"> 
      <img src="/images/logo.gif" id="8a8b8d2e262bde2d01262c08bf83000d" title="" alt="" class="image logo" /> 
    </a>   
</span> 

, 예를 들어, 사용자는 단지 변경; 그래서 나는 주변 href가 그런 식으로 관리하기 위해 노력 :

 var referenceZone = $(this).attr("id"); 
    $("#"+documentId+" a").each(function() { 
     $(this).click(function() { 
      return false; 
     }); 
    }); 

referenceZone 내이 <span id ="8a8b8d2e262bde2d01262c08317c000c" class="document">

이이 날 것으로 보인다만큼 까다 롭습니다을 둘러싼있다?

< **** 편집 ****> 여기에 테스트 목적으로 추가 샌드 박스 : http://jsbin.com/aboke/2

< **** EDIT 2 ****> 내가 이해하지 못하는 것은이다 alert (event.type)도 실행되지 않습니다 !!

//click event disabling on any href of curently edited ${"span.document"} 
    $("span#" + documentId + " a").click(function(event) { 
       alert(event.type); 
       event.preventDefault(); 
     suppressionZoneModifiable(documentId); 
      recupererTexte(referenceZone, documentId); 
    });   

답변

2

귀하의 샌드 박스 코드 http://jsbin.com/aboke/2에 오류가 많이 있습니다. 여기 몇 가지 :

1. 함수 인수가 문자열이지만 숫자로 전달

현재 인수를 큰 따옴표를 넣어해야합니다

renduZonesModifiables(8a8b8d2e262bde2d01262c08317c000c); 

2. 인수가 않습니다 스팬 ID와 일치하지

8a8b8d2e262bde2d01262c08317c000c8a8b8d2e262bde2d01262c08bf83000d

3.당신은

$(this).onclick = function() { return false; } 

$(this).click(function(e) { 
    e.preventDefault(); 
}); 

4. 당신은 JS 오류가 발생했을 수 있어야 jQuery를에 온 클릭 대신 클릭의 사용

"인수 목록 뒤에)가 없습니다"(라인 81)

+0

나는이 모든 preventDefault() 건에 집중하기 위해 모든 쓰레기를 제거했다. http://jsbin.com/aboke/4에서 보시라. 아무 것도 작동하지 않는 것 같다 ... 나는 수수께끼이다. – pixelboy

-1
$(this).click(function() { 
    return false; 
}); 

^이 작동하지 않습니다. $(...).click()을 사용하면 해당 함수가 클릭시 실행할 함수 목록에 추가됩니다. 링크를 따르는 기본 동작은 제거되지 않습니다.

당신은 수행하여 기본 링크 동작을 재정의 할 수

this.onclick = function() { return false; } 
+0

이동 확인 http://jsbin.com/aboke/2가 작동하지 않는 것 같습니다. – pixelboy

+0

죄송합니다,하지만 실제로는 jQuery를 사용하여 가능하기 때문에 downvoted. – Kordonme

+0

괜찮습니다! 나는 새로운 것을 배웠다! :) –

3

네, 가능하다, 그러나 return 문을 통해. preventDefault()를 사용하십시오.

var referenceZone = $(this).attr("id"); 
$("#"+documentId+" a").click(function(event) { 
    event.preventDefault(); 
}); 

또한, .each()는 링크와 다른 아무것도하지 않는 한 할 필요가 없습니다. 그러나 event.preventDefault()를 사용하십시오.

rest of the documentation을 참조하십시오.

+0

사용 event.preventDefault(); 거래를 바꾸지 않는 것 같지만, 내가 테스트 한 것을 추가하기 위해 내 게시물을 편집했다 ... – pixelboy

+0

명확성을 위해, 'event.preventDefault()'는 IE에서 jQuery를 사용하여 ** false false **를 반환하지만'preventDefault' 둘 다 "작동"하더라도 선호되는 추상화입니다. – David