$(найти) не работает последовательно
У меня есть окно поиска на веб-сайте, который использует расширитель AJAX с веб-сервисом. Он отлично работает на домашней странице. https://www.as-technology.co.uk/.
У меня есть тот же элемент управления на странице подраздела по адресу https://www.as-technology.co.uk/toner-cartridges/printer/brother?s=default_tonercartridgeslist
Это точно такой же элемент управления, но страница находится на один уровень ниже в иерархии файлов (не в корневой папке, а в подпапке).
Я сузил проблему, связанную с функцией javascript $(find), так как на второй веб-странице он не может найти расширитель AJAX с именем "dp1". В первом примере страницы (страница по умолчанию) это делает.
Функция JavaScript, называемая UpdateControl
<script type="text/javascript">
function UpdateControl(value) {
var behavior = $find('dp1');
if (behavior) {
behavior.populate(value);
}
return false;
}
function ClearSearch() {
var lbl = $(this).find('lblSearchResults');
lbl.value = "";
return false;
}
На второй странице переменная "поведение" пуста, поэтому заполнение не работает.
Код элемента управления это.
<%@ Control Language="C#" AutoEventWireup="true"
CodeFile="SearchBoxWithService.ascx.cs"
Inherits="MB.ASTechnology.UI.Controls.SearchBoxWithService" %>
<%@ Import Namespace="MB.ASTechnology.UI" %>
<script type="text/javascript">
function UpdateControl(value) {
var behavior = $find('dp1');
if (behavior) {
behavior.populate(value);
}
return false;
}
function ClearSearch() {
var lbl = $find('lblSearchResults');
lbl.value = "";
return false;
}
</script>
<asp:Panel ID="Panel1" runat="server" DefaultButton="btnGetHtml"
style="float:left;" >
<div class="input-append">
<input class="span2" id="txtGetHtml" type="text" placeholder="Brand & printer model or cartridge code" style="width: 250px;height:35px;" />
<asp:Button CssClass="btn btn-primary" ID="btnGetHtml" UseSubmitBehavior="true" runat="server" OnClientClick="return UpdateControl(txtGetHtml.value)" Text="Search" />
<asp:Button CssClass="btn btn-default" ID="btnClearSearch" UseSubmitBehavior="true" runat="server" OnClientClick="return ClearSearch" Text="Clear" />
</div>
<asp:Button CssClass="btn" ID="Button1" UseSubmitBehavior="true" runat="server" Text="Search" visible="false"/>
</asp:Panel>
<asp:Label ID="lblSearchResults" runat="server" Text=""></asp:Label>
<ajaxToolkit:DynamicPopulateExtender ID="dp1" runat="server" BehaviorID="dp1"
TargetControlID="lblSearchResults" ServicePath="~/TextSearchService.asmx" ServiceMethod="DynamicPopulateMethod"
ClearContentsDuringUpdate="true" PopulateTriggerControlID="Button1">
</ajaxToolkit:DynamicPopulateExtender>
2 ответа
Я использовал расширитель слайд-шоу, и он работал в основном так:
$find('behaviorID')._contextKey = value;
Я думаю, что большинство расширителей работают одинаково, поэтому это будет что-то вроде:
function UpdateControl(value) {
var behavior = $find('dp1');
if (behavior) {
behavior._contextKey = value;
}
return false;
}
НТН.
Я решил проблему. Мне не удалось разместить на странице страницу ajax toolscriptmanager, которая не работала. Вместо этого у меня был обычный скрипт-менеджер asp. Затем я вернул строку в $find('dp1'), и это сработало.