Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.01.2014, 17:01
Новичок на форуме
Отправить личное сообщение для CMTV Посмотреть профиль Найти все сообщения от CMTV
 
Регистрация: 31.01.2014
Сообщений: 3

Функция работает некорректно
Всем доброго времени суток!

Суть проблемы:

есть вызов функции без передачи параметров:

smilesObjectArray[i].onclick = insertSmile;

(smilesObjectArray это массив объектов).

Вот код функции insertSmile:

function insertSmile(smileId) {
	var smileInsertingCode = '[img]http://forum.mcmodding.ru/smilesSystem/images/' + smileId + '.png[/img]';
	var textArea = document.getElementById('theTextArea');
    var _caret = textArea.value.length + smileInsertingCode;
    textArea.value = textArea.value + smileInsertingCode;
    textArea.setSelectionRange(_caret, _caret);
    textArea.focus();
}


Без передачи параметров она стабильно работает.

Но как только вызов выглядит так:

smilesObjectArray[i].onclick = insertSmile(smilesIdArray[i]);

То при клике даже на кнопке, открывающей панель смайликов, в текстовое поле тут же записываются все имеющиеся смайлики. Хотя при вызове той же функции без параметров панель нормально раскрывается и код вписывается при клики на сами смайлики. А с параметрами уже при клике на кнопку панели сразу же все смайлы пишутся в текстовое поле. Что делать?


Последний раз редактировалось CMTV, 31.01.2014 в 17:06.
Ответить с цитированием
  #2 (permalink)  
Старый 31.01.2014, 17:16
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

самый простой вариант - сделать так:
function insertSmile() {
    var smileId = this._smileId;
    var smileInsertingCode = '[img]http://forum.mcmodding.ru/smilesSystem/images/' + smileId + '.png[/img]';
    var textArea = document.getElementById('theTextArea');
    var _caret = textArea.value.length + smileInsertingCode;
    textArea.value = textArea.value + smileInsertingCode;
    textArea.setSelectionRange(_caret, _caret);
    textArea.focus();
}

....
smilesObjectArray[i].onclick = insertSmile;
smilesObjectArray[i]._smileId = smilesIdArray[i];
....
Ответить с цитированием
  #3 (permalink)  
Старый 31.01.2014, 18:02
Новичок на форуме
Отправить личное сообщение для CMTV Посмотреть профиль Найти все сообщения от CMTV
 
Регистрация: 31.01.2014
Сообщений: 3

Спасибо, заработало. Но все же почему мой вариант не работал?
Ответить с цитированием
  #4 (permalink)  
Старый 31.01.2014, 18:45
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от CMTV
Но все же почему мой вариант не работал?
в onclick надо присваивать функцию.
а ты присваивал результат выполнения функции.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему не работает функция Терехов Станислав Общие вопросы Javascript 28 30.12.2013 14:56
Не работает функция Date demoniqus Общие вопросы Javascript 1 04.10.2013 19:40
Объясните, почему функция работает именно так. Имя Общие вопросы Javascript 36 04.09.2012 17:30
НЕ работает функция length Golovastik Серверные языки и технологии 4 14.02.2011 17:31
Не работает функция инфоокна tomAlba Общие вопросы Javascript 0 30.01.2011 00:54