runat=server нарушает мою функциональность jquery/css

У меня есть страница, которая изменяет медиафайлы на странице, такие как изображения или PDF-файлы, с использованием JQuery, так что каждый щелчок пользователя не требует обновления страницы/доступа к новой базе данных.

У меня есть контейнер DIV, который содержит все эти действия. Работает и выглядит отлично! Когда я добавляю runat="server" в тег DIV, все мое хорошее поведение ломается. Это без какого-либо кода, написанного для управления серверной стороной объекта. По какой-то причине мои стили/поведения не применяются правильно.

Я предполагаю, что есть что-то простое, но я устал гадать. Я надеюсь, что кто-то здесь знает, почему это может происходить?

Изменить: это для приложения ASP.Net.

  <div id="slidingContent" runat="server" >
    <div class="item" id="media3" name="media3">
       My media here.
    </div>
  </div>

person gdbj    schedule 24.05.2011    source источник
comment
да, я должен был указать это в своем вопросе.   -  person gdbj    schedule 28.05.2011
comment
хорошо, смотрите мой ответ (и другие тоже) :-)   -  person Thomas Shields    schedule 28.05.2011


Ответы (4)


Я предполагаю, что у вас есть это в контексте приложения .net. Если это так, вы должны указать это где-то в своем вопросе. runat="server" покалечит id; просмотрите исходный код HTML в своем браузере, чтобы точно увидеть, что он делает. Вам нужно добавить классы в свою разметку и изменить CSS и JavaScript, чтобы использовать классы вместо идентификаторов.

person ravinggenius    schedule 24.05.2011
comment
да, я думаю, что это, вероятно, так. Я наследую этот проект, созданный веб-дизайнером, и добавляю код для загрузки мультимедиа, извлеченного из SQL-сервера. Сеть CSS ID впечатляет, и мне трудно ориентироваться в ней. Я продолжаю ломать дизайн... ааа. - person gdbj; 28.05.2011

Как уже упоминалось, если вы используете ASP.NET, он изменит ваш идентификатор, если у вас есть runat="server". Чтобы обойти это, в вашем JS используйте:

document.getElementByID("<%=slidingContent.ClientID%>");

or

$("#<%=slidingContent.ClientID%>");
person Thomas Shields    schedule 24.05.2011
comment
к сожалению, сложность унаследованного мной JS слишком велика, чтобы сделать это. Я решил изменить свой подход, чтобы свести к минимуму влияние на JS. - person gdbj; 28.05.2011
comment
Мне пришлось внести одно изменение в свой JS, и ваше предложение здесь было очень ценным. Спасибо еще раз. - person gdbj; 29.05.2011

сделать источник просмотра на отображаемой странице. id="slidingContent", вероятно, был изменен asp.net.

person David    schedule 24.05.2011

Я не знаю, используете ли вы страницы Master/Content, но если да, то, что я обнаружил, работает, если дать вашим страницам Master/Content идентификатор.

Если вы просто используете по одному из них и предполагаете, что главной странице присвоен идентификатор «Mstr», а странице содержимого — идентификатор «Cont», вы можете создать такие префиксы JavaScript:

var masterPrefix = "Mstr_",
    contentPrefix = "Cont_";

Затем вы можете создать функцию с именем $getElement(), которая позволит вам передать идентификатор, указанный в вашей разметке, следующим образом:

function $getElement(id) {
    return $("#" + masterPrefix + contentPrefix + id);
}

Затем, учитывая ваш конкретный пример, вы можете получить объект jQuery в свой div runat="server", выполнив следующие действия:

var $slidingContent = $getElement("slidingContent");

Я обнаружил, что этот метод спасает жизнь, когда вы работаете с большими проектами, в которых много сценариев на стороне клиента.

В качестве альтернативы, если вам не нравится вызывать другую функцию для возврата вашего объекта, вы всегда можете сделать это:

var $slidingContent = $('div[id$="slidingContent"]');

Здесь вы просто говорите, дайте мне div, идентификатор которого заканчивается на «slidingContent».

person Code Maverick    schedule 24.05.2011
comment
Я поиграю с этой идеей... спасибо. Действительно было трудно понять более основную проблему, заключающуюся в том, что ASP назначал идентификаторы, которые нарушали JS/CSS. Веб-дизайнер написал сайт, который не очень удобен в сочетании с требованием ASP.Net по присвоению идентификаторов элементам, которыми он манипулирует. - person gdbj; 28.05.2011