#javascript #jquery #asp.net #ajax
#javascript #jquery #asp.net #ajax
Вопрос:
По сути, у меня есть представление сетки, которое я просматриваю через сервер, а не в памяти, проблема в том, что каждая строка в представлении сетки имеет URL-адрес, который я изменяю с помощью javascript, серверный элемент управления, который я использую для этого столбца в asp: поле гиперссылки. Причина, по которой это должно быть сделано в динамическом javascript, заключается в том, что я должен экранировать параметр, который добавляется к url в качестве параметра запроса, потому что в нем могут быть хэш-теги.Итак, мой javascript:
$('#<%=grid1.ClientID%> a').each( function(){
var url= $(this).attr("href");
var parameter =//this line gets the parameter from the url
url= "Page.aspx?param=" escape(parameter);
$(this).attr("href", url);
});
Это работает при загрузке первой страницы с URL-адресами, которые изначально хранятся в gridview, но поскольку я выполняю подкачку на сервере и использую ajax (asp.net updatepanel) также, поэтому на следующей странице не запускается javascript, поскольку он не обновляет страницу. Я думаю, что здесь вступит в игру jquery live, но не уверен, что это точно, потому что я думаю, что событие должно быть запущено, чтобы инициировать живой обработчик
Ответ №1:
Нет, к сожалению live
, обработчики не будут работать для изменения фактического href. Однако, если вы немного измените свой подход, вы можете получить тот же эффект.
$('#<%=grid1.ClientID%> a').live('click', function(e) {
e.preventDefault();
var url = $(this).attr("href");
var parameter =//this line gets the parameter from the url
url = "Page.aspx?param=" escape(parameter);
window.location = url;
});
Таким образом, вместо изменения фактического атрибута для каждой ссылки вы переопределяете поведение, связанное с переходом по этой ссылке.
Комментарии:
1. этот подход работает, только одно изменение, поскольку я использую IE e.preventDefault() должен быть заменен на e.returnValue=false
2. @Jake: Ты уверен?
e.preventDefault()
это функция jQuery, которая должна быть совместима со всеми браузерами.3. @Jake: на этой странице даже не упоминается jQuery. jQuery заботится о переводе
.preventDefault()
во все, что требуется текущим браузером. Попробуйте этот пример с помощью Internet Explorer: jsfiddle.net/ZQMfj/34. может быть, я забыл добавить e в параметры функции, но поскольку returnvalue =false работает, я не вижу причин его менять .. хотя спасибо
5. @Jake: Пока все ваши пользователи будут использовать только IE, это нормально.