#javascript #jsp #onclick
#javascript #jsp #onclick
Вопрос:
Я хотел бы вставить вызов функции, чтобы получить параметр для моей onclick
функции JavaScript. То, что я хотел бы сделать, это что-то вроде:
<input class="refreshbutton"
type="button"
id="searchUfficiPopup"
onClick="javascript:postColorbox('/DeliDete/searchUfficiPopupBySettoreId', **'amp;settoreIdKey=${javascript:getSettoriId()}'**, 'tabUfficiForm', 'initScriptUffici')"
value="<fmt:message key="navigation.searchUffici"/>" />
Таким образом, Eclipse сообщает мне, что функция javascript:getSettoriId()
не определена. Я определил эту функцию во внешнем файле .js, загруженном во время выполнения с помощью jQuery .getScript
, поэтому я не хотел бы вставлять ее в jsp (в любом случае, я попытался вставить ее в jsp, но IDE по-прежнему говорит, что функция не определена).
Функция postColorbox определяется как:
function postColorbox(url, parameters, formName, initScript)
Функция getSettoriId()
возвращает значение ранее введенного элемента формы Settori
, который мне нужен для выполнения ограниченного запроса (мне нужно получить все объекты Uffici, связанные с выбранным объектом Settori)
Рассказав об этом, я хотел бы спросить у вас экспертов:
-
Возможно ли вообще использовать функцию JavaScript в качестве параметра функции onclick JavaScript?
-
Если я помещу эту функцию для вызова во внешний файл .js, сможет ли jsp увидеть ее и вызвать?
Спасибо всем за вашу помощь! Андреа
Ответ №1:
Удалите onClick
на своем <input>
и сделайте это с помощью обработчика событий jQuery:
$('#searchUfficiPopup').click(function() {
var settoriId = getSettoriId();
postColorbox('/DeliDete/searchUfficiPopupBySettoreId',
'amp;settoreIdKey=' settoriId,
'tabUfficiForm',
'initScriptUffici');
return false;
});
Комментарии:
1. Спасибо, я только что сделал это 2 минуты назад немного другим способом: функция searchUfficiPopupBySettori() { postColorbox(‘/DeliDete/searchUfficiPopupBySettoreId’, ‘amp;settoreIdKey=’ getSettoriId(), ‘tabUfficiForm’, ‘initScriptUffici’); } и в onClick: onClick=»javascript:searchUfficiPopupBySettori()»
2. Не используйте
onclick
. Присоедините обработчик событий с помощью jQuery. И даже если вы используетеonclick
, вам не нуженjavascript:
префикс (он нужен только в том случае, если вы вызываете функции JavaScript изhref
).3. Я удалил различные «javascript:», как вы сказали. Я видел это в учебнике и подумал, что это необходимо. Можете ли вы объяснить, почему я должен использовать обработчик jQuery вместо onClick? Я не знаю различий между ними. Может быть, кроссбраузерное неправильное поведение onClick? Еще раз спасибо
4. Ну, это просто для того, чтобы сохранить JavaScript в JavaScript и не «загрязнять» HTML ссылками на него. При достаточно продвинутом JS (где вы динамически создаете HTML, который вставляете в свой документ) вам все равно нужно будет присоединять обработчики событий с помощью JS, поэтому смешивание
onclick
с вложением JS просто делает его беспорядочным и сложным в обслуживании. Поскольку вы используете jQuery, который делает вложение обработчика событий настолько простым, это единственное, что можно сделать, на самом деле. 🙂
Ответ №2:
Вызов функций изнутри элемента HTML не является предпочтительным способом. Если вы можете — просто назначьте элементу идентификатор или класс, а затем добавьте к нему прослушиватель с помощью javascript при загрузке страницы.
Таким образом, ваши данные и операции не будут смешиваться. Также будет проще модифицировать код, поскольку ваш код будет находиться в файлах js.