Использование Javascript внутри динамически загружаемого UserControl на вкладках jQuery Ui

Мне нужно вставить некоторый код JavaScript в UserControl, который я загружаю из вызова Ajax через вкладки пользовательского интерфейса jQuery. Позволь мне объяснить...

Это мой вид (с загруженным jQuery)

<script type="text/javascript">
    $(document).ready(function () {
        $("#tabs").tabs({
        cache: false,
        });
        getContentTab (1);
    });

    function getContentTab(index) {
        var url='<%= Url.Content("~/Home/getUserControl") %>/' + index;
        var targetDiv = "#tabs-" + index;

        $.get(url,null, function(result) {
            $(targetDiv).html(result);
        });
    }
</script>

<div id="tabs">
    <ul>
        <li><a href="#tabs-1" onclick="getContentTab(1);">Nunc tincidunt</a></li>
        <li><a href="#tabs-2" onclick="getContentTab(2);">Proin dolor</a></li>
        <li><a href="#tabs-3" onclick="getContentTab(3);">Aenean lacinia</a></li>
    </ul>
    <div id="tabs-1">
    </div>
    <div id="tabs-2">
    </div>
    <div id="tabs-3">
    </div>
</div>

С помощью этих строк кода я вызываю функцию Ajax для загрузки содержимого в DIV. Это действие от контроллера:

public ActionResult getUserControl(int num)
    {
        return PartialView("TestUC", num);
    }

А это пользовательский контроль...

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
Number... <span id="testSpan"><%=Model.ToString() %></span>!! 
<input type="button" value="Click me!!" onclick="message();" />
<script type="text/javascript">
function message(item) {
    alert($("#testSpan").html());
}
</script>

Проблема в том, что функция message() всегда возвращает 1 (вместо того, чтобы возвращать правильное число).

У меня вопрос... Как мне добавить скрипт в мой UserControl, чтобы мой код работал правильно?


person Flea777    schedule 25.01.2011    source источник


Ответы (2)


Я просто предполагаю здесь.

Я предполагаю, что ваша проблема в том, что когда вкладка загружена, она остается в DOM, даже если вы открываете другую (т. Е. Если по умолчанию используется № 1, она останется загруженной, даже если вы нажмете на второй).

Если это происходит, когда вы вызываете функцию сообщения, будет несколько элементов с идентификатором "testSpan", и селектор jQuery $("#testSpan") вернет первый из них.

Я предполагаю, что это всего лишь тестовый код, но в данном конкретном случае я бы добавил ‹%= Model.ToString() %> в качестве аргумента функции javascript.

Опять же, я просто догадываюсь о поведении функции jquery-ui tabs().

С Уважением

person willvv    schedule 25.01.2011
comment
Это может быть решением, но я решил другим (более чистым ИМХО) способом. Теперь я очищаю содержимое предыдущей вкладки, таким образом, идентификатор всегда уникален. Благодарю вас! - person Flea777; 26.01.2011

Попробуйте добавить такой скрипт

<script type="text/javascript" defer="defer">
function message(item) {
    alert($("#testSpan").html());
}
</script>
person scorpio    schedule 04.03.2011