ArtemKrass,
Полагаю, что в данном случае работает "песочница", которую предоставляет гризманки пользовательским скриптам из соображений безопасности (подробнее тут -
Greasemonkey_Manual:Environment).
Т.е. напрямую, через html, обработчик назначить нельзя:
function alertsms(){alert("Hello");}
element.innerHTML = '...<input ... onсlick="alertsms()">...';
Это можно обойти хаком:
unsafeWindow.alertsms = function(){alert("Hello");}
element.innerHTML = '...<input ... onсlick="alertsms()">...';
Но логичнее и безопаснее привязать обработчик c помощью js:
function alertsms(){alert("Hello");}
element.innerHTML = '...<input id="xyz"...>...';
document.getElementById('xyz').onclick = alertsms;
// или document.getElementById('xyz').addEventListener("click", alertsms, false);
P.S. Внешняя анонимная функция с вызовом «на месте» - это стандартный прием для локализации своих "глобальных" переменых:
функция-с-вызовом-на-месте