2010-02-15 4 views
0

다음 코드 단편은 FF에서는 작동하지만 IE8에서는 작동하지 않습니다. Prev는 올바른 요소를 반환하지만 val()을 지원하는 객체는 반환하지 않습니다. 따라서 나는 그것에 .val()을 실행할 수 없다.Jquery IE8 prev not working

<input type="hidden" name="data[De][1]" value="1" id="De1" /> 
    <td class="dr_name">document1</td> 
    <td class="remove_dr" colspan="2" align="left"> 
    <a href="javascript:void(0)">Remove</a></td> 

<script> 
$(".remove_dr").live('click', function(e) { 
    e.preventDefault(); 
    var value = $(this).prev().prev().val(); 
    alert(value); 
} 
</script> 

어떤 도움이나 더 좋은 코드를 보내 주시면 감사하겠습니다.

+0

왜 '

'을 사용하고 있습니까? 'form'을 사용하면 일이 덜 까다 롭습니다. –

답변

3

2 것들 :

  1. 당신은 <td>
  2. 하는 경우가 옆 <input>을 가질 수 없습니다 너는 할 수 있었다 (할 수 있지 않는다!), 형제 자매를 사용하십시오 :

    var value = $(this).parent().siblings("input:hidden").val();

올바른 위치에 숨겨진 입력을 재배치해야합니다.

+0

Firefox는 잘못된 마크 업에보다 관대합니다 ... 좋은 점과 나쁜 점이 다를 수 있습니다. – Matt

+0

감사합니다. 숨겨진 필드를 이동해야했습니다. –

0

당신은 당신의 전화에 닫는 괄호를 놓치고있는 것은) (살 :

$(".remove_dr").live('click', function(e) { 
    e.preventDefault(); 
    var value = $(this).prev().prev().val(); 
    alert(value); 
}); 
0

모두 동일한 레벨이라고 가정하면 prev 콜이 더 필요합니다 ...하지만 형제는 아닐 수도 있습니다. 입력이 a과 동일한 td 안에 있지 않으므로 작동하지 않습니다. 게다가 그 입력은 td 안에 있어야하며, 그것은 테이블 구조로 randaomly하게 가지고 있습니다.

0

라이브 이벤트를 사용하는 동안 Firefox와 IE에서 차이가 있음을 확인했습니다. 이것이 내가 어디에 사례를 발견 한 것은 당신이

0

을 찾는 것을

$(".remove_dr").live('click', function(e) { 
    eventTarget = getEventTarget(e); 
    // e.preventDefault(); you can return false instead 
    var value = $(eventTarget).prev().prev().val(); 
    alert(value); 
    return false; 
}); 

희망

내부 그래서

getEventTarget = function(e){ 
    var targ; 
    if (!e) var e = window.event; 
    if (e.target) targ = e.target; 
    else if (e.srcElement) targ = e.srcElement; 
    if (targ.nodeType == 3) targ = targ.parentNode; 
    return targ; 
} 

: 나는 모든 브라우저에 걸쳐 동일한 이벤트 목표를 얻기 위해이 기능을 사용하는 이유입니다 IE8에서 prev()가 예상대로 작동하지 않았습니다. prevAll ("selector : eq (0)")을 사용하면 prev ("selector") 대신 사용할 수 있습니다.