Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция работает некорректно (https://javascript.ru/forum/misc/44750-funkciya-rabotaet-nekorrektno.html)

CMTV 31.01.2014 17:01

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

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

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

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]);

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


Яростный Меч 31.01.2014 17:16

самый простой вариант - сделать так:
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];
....

CMTV 31.01.2014 18:02

Спасибо, заработало. Но все же почему мой вариант не работал?

Яростный Меч 31.01.2014 18:45

Цитата:

Сообщение от CMTV
Но все же почему мой вариант не работал?

в onclick надо присваивать функцию.
а ты присваивал результат выполнения функции.


Часовой пояс GMT +3, время: 03:29.