Jsp с параметром javascript внутри javascript onclick

#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)

Рассказав об этом, я хотел бы спросить у вас экспертов:

  1. Возможно ли вообще использовать функцию JavaScript в качестве параметра функции onclick JavaScript?

  2. Если я помещу эту функцию для вызова во внешний файл .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.