2012-08-05 2 views
0

Я связывание события, как это, используя прототип ЯША:Как запустить событие немедленно?

$('country').observe('change',function(e) { ... }); 

Как я могу стрелять один раз сразу?

в jQuery, я бы просто нажал на .triggerHandler('change'). Есть ли что-то подобное в прототипе?

+0

Что вы подразумеваете под этим? как только страница загружается? –

+0

@NoahPassalacqua: Нет. Немедленно немедленно. Как и в случае, когда эта строка кода ударяется. Он находится ниже элемента HTML, поэтому я знаю, что он уже существует. – mpen

ответ

1

Используйте событие load. Что-то вроде этого:

// calls addListeners when the document loads 
Event.observe(window, 'load', addListeners, false); 

function addListeners() { 

    // called onLoad 
    fireOnce(); 

    // observer for the country dropdown 
    $('country').observe('change', function(event) { 
     fireOnChange(); 
    }); 
} 

function fireOnce() { 
    // do something 
} 

function fireOnChange() { 
    // do something 
} 

При загрузке документа, fireOnce() будет выполняться. Я использую эту технику все время.

+1

Я надеялся, что могу просто запустить анонимную функцию ... это немного перебор. – mpen

1

Если вы используете расширение, это вариант, у меня был успех в прошлом с event.simulate для этой цели.

это позволит вам сделать что-то вроде:

$('country').simulate('change'); 
1

Попробуйте это:

var handler = function(e) {...}; 
$("country").observe("change",handler); 
handler(); 

В качестве альтернативы (менее читаемым, позволяет избежать временной переменной):

$("country").observe("change",(function(e) { ... return arguments.callee;})()); 

Однако в обоих случаях вы не сможете использовать this, как и следовало ожидать. Это решение лучше подходит для более общих обратных вызовов, например для setInterval

+0

В настоящее время я использую прежний метод ... 'arguments.callee' устарел, не так ли? – mpen

0

... если вы знаете, что он существует, и вы знаете, что не ожидаете загрузки или ожидаете загрузки сценария, почему бы и нет:

(function (el) { 
    if (!el) { return; } 
    doSomething(el); 
}(document.getElementById("country"))); 
+0

, который будет запускать его один раз и только один раз. Где событие изменения? – mpen

+0

@Mark Добавьте его после - или включите этот вызов внутри вашего определения функции. Вы хотите сделать две вещи: 1) инициализировать свой код и добавить слушателя. 2) обрабатывать последующие изменения. Так относитесь к этому. Даже если это означает определение функции 'handChange', а затем добавление слушателя' change' к вашему объекту, а затем автоматически вызов функции handleChange в первый раз с использованием шаблона, который я написал. Тогда вам не придется почесывать голову, пытаясь обработать инициализацию в вашем общем приемнике, и наоборот. – Norguard

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