Jquery не работает с MultiView - PullRequest
       7

Jquery не работает с MultiView

1 голос
/ 19 апреля 2011

У меня есть div внутри MultiView, который находится внутри UpdatePanel.Когда я нажимаю на кнопку внутри UpdatePanel, выполняется обратный вызов и появляется div, но он не меняет свой цвет при наведении курсора мыши (jquery не работает).

Если я помещаю div снаружиjQuery UpdatePanel работает правильно.

В чем здесь проблема?

Спасибо

<script src="jquery-1.5.2.min.js" type="text/javascript"></script>
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<script type="text/javascript">
    $(document).ready(function () {
        $("#MyDiv").hover(function () { $(this).css({ 'background-color': 'Red' }) });
    });     

</script>

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:MultiView runat="server" ID="mvPopup">
            <asp:View ID="View1" runat="server">
              <div id="MyDiv">Some text here</div>
            </asp:View>
        </asp:MultiView>
        <asp:LinkButton runat="server" OnClick="btnLink_Click" ID="btnLink" Text="Click here" />
    </ContentTemplate>
</asp:UpdatePanel>

protected void btnLink_Click(object sender, EventArgs e)
    { 
        mvPopup.ActiveViewIndex = 0;
    }

Ответы [ 5 ]

3 голосов
/ 04 мая 2011

Вы можете использовать обработчик событий Sys.Application.add_load для выполнения клиентского сценария после завершения обратной записи ajax.Вы, вероятно, не хотите заключать его в Document Ready, просто поместите свой код jquery в простую функцию и вызовите его из AjaxLoadComplete ().

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script type="text/javascript">

    Sys.Application.add_load(AjaxLoadComplete);

    function AjaxLoadComplete() {
        //Call your jquery methods here
    }


</script>

Кроме того, убедитесь, что вызов add_load () следуеттег scriptmanager.Вы не можете поместить его в заголовок, потому что объект SYS уже существует.

3 голосов
/ 19 апреля 2011

Попробуйте использовать .live , так как div отсутствует на странице при первой загрузке документа:

$(document).ready(function () {
        $("#MyDiv").live("hover", function () { $(this).css({ 'background-color': 'Red' }) });
    });

Если вы хотите сделать что-то другое после наведения, попробуйте связать как mouseover, так и mouseout:

$('#MyDiv').live('mouseover mouseout', function(event) {
  if (event.type == 'mouseover') {
    // do something on mouseover
  } else {
    // do something on mouseout
  }
});
2 голосов
/ 19 апреля 2011

Я полагаю, что панель обновлений асинхронно вводит контент, что означает, что он помещается на страницу после срабатывания события document.ready.Таким образом, вы привязываетесь к этому событию после того, как оно уже произошло.Попробуйте удалить часть document.ready и посмотреть, работает ли она.

РЕДАКТИРОВАТЬ: Или просто используйте live, как предложили другие.Это, наверное, лучше.Я почти уверен, что мои рассуждения верны, почему они не работают!

1 голос
/ 19 апреля 2011

Проблема в том, что при создании div скрипт jquery уже запущен. Попробуйте связать со свойствами наведения курсора и мыши, используя метод jquery live

0 голосов
/ 19 апреля 2011

Еще одна вещь может также заключаться в том, что .Net переписывает id ваших элементов, поэтому ваш jquert не может найти правильный id

с веб-формами .Net попробуйте использовать следующий селектор в jquery $("[id$='MyDiv']")

...