JQuery: не могу вызвать функцию

0

У меня был код, работающий с Telerik RadGrid. Когда я помещаю его на новую страницу, я все равно получаю $ undefined. Ajax не определен до тех пор, пока я не приведу в библиотеку jQuery (даже если она включена в основную страницу). Я пытаюсь вызвать DoUpdate, когда кнопка нажата, и получить ошибку, которая не определена.

 <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
    <script src="../Scripts/jquery-1.10.2.min.js"></script> 
    <script type="text/javascript">
        $(document).ready(function () {

            function DoUpdate(sbiId) {
                var input = '{"SbiId":"' + sbiId + '"}';
                var dataSource;

                $.ajax({
                    url: "http://www.blah.com/services/testsService.svc/GetContactsDataAndCount",
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    data: input,
                    dataType: "json",
                    success: function (data) {
                        // updateGrid(data);
                        var mtv = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
                        console.log(data);
                        mtv.set_dataSource(data.d.Data);
                        mtv.dataBind();
                    }
                });
                }

        });
        </script>
    </telerik:RadCodeBlock>

    <p>
          <asp:Button ID="Button1" runat="server" Text="Update" OnClientClick="DoUpdate(1); return false" />
      </p>
  • 0
    Вы объявили свою функцию внутри другой функции (обратный вызов $(document).ready ). Это делает его недоступным. Объявите его в глобальной области видимости, чтобы ваша кнопка могла получить к нему доступ. Более того, OnClientClick свое мероприятие с JS, а не с OnClientClick . Не используйте $(document).ready если вам не нужно и не поймете его назначение.
  • 0
    Спасибо, что работает!
Теги:
telerik

1 ответ

2

DoUpdate находится внутри $ (document).ready(function() {}) - таким образом, что-либо снаружи не может получить к нему доступ.

Вот два способа исправить это: используйте jQuery, чтобы выбрать кнопку и подключить событие клика, или выставить эту функцию вне готового блока. Вот последний:

 <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
    <script src="../Scripts/jquery-1.10.2.min.js"></script> 
    <script type="text/javascript">
        var DoUpdate;
        $(document).ready(function () {

            DoUpdate = function(sbiId) {
                var input = '{"SbiId":"' + sbiId + '"}';
                var dataSource;

                $.ajax({
                    url: "http://www.blah.com/services/testsService.svc/GetContactsDataAndCount",
                    type: "GET",
                    contentType: "application/json; charset=utf-8",
                    data: input,
                    dataType: "json",
                    success: function (data) {
                        // updateGrid(data);
                        var mtv = $find("<%= RadGrid1.ClientID %>").get_masterTableView();
                        console.log(data);
                        mtv.set_dataSource(data.d.Data);
                        mtv.dataBind();
                    }
                });
                }
        });
        </script>
    </telerik:RadCodeBlock>

    <p>
          <asp:Button ID="Button1" runat="server" Text="Update" OnClientClick="DoUpdate(1); return false" />
      </p>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню