Остальные ответы совершенно верны, вы пересчитываете суммарные нагрузки теста. Код в целом может быть сокращен, хотя. Например.,
HTML
<input type="hidden" id="test1" class="test_item" value="0" />
<input type="hidden" id="test2" class="test_item" value="0" />
<input type="hidden" id="test3" class="test_item" value="0" />
<a href="#" class="HiddenFieldLink" data-hidden-field="test1">- Click me to check button 1</a><br />
<a href="#" class="HiddenFieldLink" data-hidden-field="test2">- Click me to check button 2</a><br />
<a href="#" class="HiddenFieldLink" data-hidden-field="test3">- Click me to check button 3</a><br />
<br /><br />
<a href="#" id="test_submit">Submit this</a>
Я поместил класс по ссылкам вместо идентификатора, удалил javascript href и дал элементам атрибут data, чтобы указать их соответствующее поле.
Javascript
$(document).ready(function() {
// Text for button 1 clicked.
$(".HiddenFieldLink").live('click', function(e) {
var link = $(this),
hiddenField = link.data('hiddenField');
// BUTTON CLICKED
$('#' + hiddenField ).val("1");
// CHANGE TEXT
link.text("Button clicked");
e.preventDefault();
});
// The tricky party
$("#test_submit").live('click', function() {
var test_total = "EMPTY",
entries = $.map($(".test_item"), function(item) {
if(item.value === '1') {
return item.id;
}
});
if(entries.length) {
test_total = entries.join("/SEPERATOR/");
}
// Show me the output.
alert("Variable test_total is now:\n" + test_total);
});
});
Теперь нам нужен только один обработчик событий для всех ссылок, которые изменяют скрытые поля. Дополнительно e.preventDefault (); останавливает ссылку, пытаясь что-либо сделать (лучше, чем пустой javascript).
Наконец, я переключил оператор submit для использования функции jQuery $ .map (), которая возвращает массив элементов, возвращаемых функцией, предоставленной в качестве второго аргумента. После этого вы можете присоединиться к вашему разделителю.
Вот jsFiddle .