2010-11-02 1 views
2

Итак, я просмотрел большинство вопросов в facebook здесь, и он полностью подтвердил мои мысли. Развитие Facebook может быть одним из худших, что я когда-либо использовал. Я избегаю своего разглагольства, но в качестве примечания к тому, откуда я берусь: пробовал php sdk, работал прилично из коробки, выяснил, что мне нужно разместить функциональность на вкладке страниц, не могу iframe на страницы, нужно использовать FBML (который они выходят из системы через два месяца, но пока я не могу начать тестирование iframe-подхода)Facebook JS (FBJS) прослушиватель событий

В любом случае, я нахожусь в FBJS на этом этапе. Он работает «достаточно хорошо» для большинства вещей, но по какой-то причине я не могу получить событие, зарегистрированное для объекта (в частности, поле выбора), добавив слушателя (согласно документации FBJS). Я могу добавить его непосредственно к html-объекту и заставить его работать, но это нежелательно, и мне бы очень хотелось узнать, что я считаю правильным способом сделать это, что предполагает разделение логики и отображения.

То, что я хочу, чтобы это произошло: нажмите на поле выбора, сделать выбор, отображать текст выбора в пустой DIV (позже добавив Ajax, но один шаг в то время здесь)

Код:

<script> 
    var obj = document.getElementById('select-id'); 
    obj.addEventListener('onchange',my_func); 
    function my_func(evt){ 
     var inner = document.getElementById('div-id'); 
     inner.setTextValue('hey');  // for testing purposes 
    } 
</script> 

Приведенный выше код ничего не делает, когда я вношу изменения в поле выбора. Тем не менее, это ведет себя, как и планировалось:

<select name="find_state" id="find_state" onchange="my_func();"> 

Я буду с неохотой, используя этот метод, как я разрабатываю, но было бы очень хотелось знать, что я могу делать неправильно или если кто-то имеет эту проблему? И если у кого-то есть какие-либо мнения по этому вопросу, я хотел бы узнать о какой-либо форме рекомендаций по разработке facebook, поскольку приложения, страницы и вкладки кажутся совершенно разными, но все же кажется, что все они должны делать то же самое с меня? Есть ли единый способ развития во всех трех этих вещах, или я чего-то не хватает?

Заранее спасибо, а также за помощь в прошлом!

ответ

0

Я думаю, что это должно быть:

obj.addEventListener('change',my_func); 

(вместо onchange)

+0

Благодарим за быстрый ответ! Я попробовал это и просто попробовал снова и не повезло. Я также пробовал тестировать другие объекты для «click», «onclick», «onClick» и т. Д. Является ли действие минус «включено» правильным синтаксисом? – 2bsharpdev

+0

@ 2bsharpdev Похоже, что нет необходимости: http: //developers.facebook.com/docs/fbjs # events – serg

0

прямо из Facebook documentation:

Третий параметр [в addEventListener], требуется логическое useCapture (это не имеют значение по умолчанию)

Это означает, что вы должны иметь:

obj.addEventListener('change', my_func, false); 
+0

Да, я помнил, что видел это, я пробовал как ложные, так и истинные (сделал это снова сейчас на случай) и никакого эффекта. также хотели бы отметить, что их пример не использует этот третий параметр? Возможно, я здесь полный идиот, вы можете использовать FBJS на вкладке приложения FBML (я думаю, это то, что вы называете?) – 2bsharpdev

0

Используйте следующий html, и ваши события, связанные с .addEventListener(), начнут работать. Это, кажется, недокументированная «функция».

<select name="find_state" id="find_state" onmousedown="return true;"> 

Это также позволяет событию запускать первый раз, когда пользователь меняет значение выбора. В противном случае он срабатывает только во время второго события обмена.