2010-02-15 2 views
0

Следующий фрагмент кода работает в FF, но не в IE8. Prev возвращает правильный элемент, но не как объект, который поддерживает val(). Следовательно, я не могу запустить .val() на нем.JQuery IE8 prev не работает

<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. Вы не можете иметь <input> рядом с <td>
  2. If вы можете (и вы не можете!), использовать родственные братья и сестры:

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

Необходимо переместить скрытый вход, чтобы находиться в допустимом месте.

+0

Firefox, как правило, более терпим к недопустимой разметке ... что может быть как хорошим, так и плохим. – Matt

+0

Спасибо. Скрытое поле должно было быть перемещено. – 2010-03-10 09:13:12

0

Вы упускаете закрытие скобку на вашем призыве жить():

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

Вам нужен еще один звонок prev, предполагая, что все они находятся на одном уровне ... но они не являются даже братьями и сестрами. вход не находится внутри того же td как a, так что он не будет работать. кроме того, этот вход должен находиться в пределах td yu cant jsut, если он имеет randaomly в структуре таблицы.

0

При использовании живых событий я заметил, что есть разница для Firefox и IE. Именно поэтому я использую эту функцию, чтобы получить ту же цель события во всех браузерах:

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; 
} 

так внутри

$(".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; 
}); 

надежда, что это то, что ищете

0

Я нашел случай, когда prev() не работает как ожидалось на IE8. Я считаю, что использование prevAll («selector: eq (0)») работало как замена prev («селектор»).

Смежные вопросы