У меня был код, работающий с 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>
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>
$(document).ready
). Это делает его недоступным. Объявите его в глобальной области видимости, чтобы ваша кнопка могла получить к нему доступ. Более того,OnClientClick
свое мероприятие с JS, а не сOnClientClick
. Не используйте$(document).ready
если вам не нужно и не поймете его назначение.