function callback (e) {
e.preventDefault();
// ...
// действия с данными формы, удаление пробелов и прочего
// ...
form.submit();
}
// вот это
//$("#echoAjax").html(...);
// заменить на это
$("#echoAjax").append(...);
// реализация паттерна Обозреватель (Observer)
var topics = {};
function observer(id) {
var topic = id && topics[id];
if (! topic) {
var callbacks = $.Callbacks('memory');
topic = {
publish : callbacks.fire,
subscribe : callbacks.add,
unsubscribe : callbacks.remove
};
if (id) {
topics[id] = topic;
}
}
return topic;
};
// подписываемся на некую функцию
observer('checkboxes').subscribe(handleCheckboxesState);
// биндим всем чекбоксам при изменении их состояния вызывать у подписчиков функцию обработки
$(function() {
$(':checkbox').on('change', function() {
observer('checkboxes').publish($(this));
});
})
// функция обработки
function handleCheckboxesState($checkbox) {
// все чекбоксы - $(':checkbox').
// кликнутый чекбокс - $checkbox
}
var globalState = 0;
function onEvent1() {
++globalState;
myMethod();
}
function onEvent2() {
++globalState;
myMethod();
}
function myMethod() {
if (globalState < 2) {
return;
}
// тут главная логика...
}
<th id="sto">100</th>
<td onclick="ChangeColor( this, '#FEEC88' ); ChangeColor( document.getElementById("sto"), '#FEEC88' )"> </td>
<th id="sto">100</th>
<td onclick="ChangeColor( [this, document.getElementById("sto")], '#FEEC88' )"> </td>
var last_change = [];
var last_color = [];
function ChangeColor( elements, color ){
if (typeof element !== 'array') {
elements = [elements];
}
for (var i = elements.length; --i;) {
var element = elements[i];
if( last_change[element.id] != null ){
last_change[element.id].style.backgroundColor = last_color[element.id];
}
last_change[element.id] = element;
last_color[element.id] = element.style.backgroundColor;
element.style.backgroundColor = color;
}
}
$(selector).on('trigger', ...)
$(this).parent().parent().find('td')
$(this).parents('td')
"2.3" * 2 => 4.6
"2,3" * 2 => NaN
canvas.getImageData(0, 0, canvas.width, canvas.height)