Это немного поздно, но вот о чем я подумала, когда сказала, что использовать методы обработчика событий jQuery. Обратите внимание, что я сделал несколько изменений в соответствии со своими методами и использовал cellpadding
и cellspacing
в качестве ярлыка для более удобного отображения таблицы (в большинстве случаев я не использовал бы эти атрибуты на практике).
Вы увидите, что я создаю базовый элемент error
($err
), который я затем клонирую и добавляю после строки щелчка при первом нажатии. Затем я переключаю это tr.err
, используя $(this).next('.err')
.
Это гораздо проще сделать, чем с помощью встроенных обработчиков событий, как у вас.
HTML
<div class="parts-list">
<h1 class="link" id="filtersControl">FILTERS</h1>
<table class="list" width="100%" cellspacing="1" cellpadding="1" border="1">
<tr>
<th class="first" width="128" scope="col">FA PART#</th>
<th width="213" scope="col">MOTORCRAFT# (FORD#)</th>
<th width="226" scope="col">DESCRIPTION</th>
<th width="87" scope="col">ON-HAND</th>
<th width="107" scope="col">USE:</th>
</tr>
<tr id="110Control" class="list">
<td class="first alt link"></td>
<td class=" alt link"><a href="#">(2C2Z1107BA)</a></td>
<td class=" alt link"><a href="#">WHEEL STUD </a></td>
<td class=" alt link"><a href="#">5</a></td>
<td class=" alt link">
<input name="110" type="text" id="110" size="3" maxlength="2" />
</td>
</tr>
<tr id="109Control" class="list">
<td class="first link"></td>
<td class=" link"><a href="#">(2C2Z1012AA)</a></td>
<td class=" link"><a href="#">WHEEL NUT </a></td>
<td class=" link"><a href="#">5</a></td>
<td class=" link">
<input name="109" type="text" id="109" size="3" maxlength="2" />
</td>
</tr>
</table>
</div>
CSS
.parts-list {
border: 1px solid #86BBD2;
background: #CEE7EE;
}
.parts-list h1 {
margin: 0;
padding: 4px;
font: sans-serif;
font-size: 1em;
font-weight: normal;
color: #acacac;
}
.parts-list table.list {
display: none;
}
Javascript
$(document).ready(function(){
var $partslist = $('.parts-list'),
cols = $partslist.find('table.list tr td').length,
$err = $('<tr><td>');
$err.addClass('err')
.find('td')
.attr('colspan', cols)
.text('This part does not fit any vehicles in your fleet.')
.click(function(){
$(this).toggle();
return false;
});
var toggleOn = function(){
var $this = $(this),
$clone;
if (!$this.next().is('.err')) {
$clone = $err.clone(true);
$(this).after($clone);
} else {
$this.next('.err').show();
}
};
var toggleOff = function(){
var $next = $(this).next();
$(this).next('.err').hide();
};
$partslist.find('h1').click(function(){
$(this).siblings('table.list').toggle();
});
$partslist.find('table.list tr').not(':has(th)').toggle(toggleOn, toggleOff);
});
http://jsfiddle.net/kREhM/