$(найти) не работает последовательно

У меня есть окно поиска на веб-сайте, который использует расширитель 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'), и это сработало.

Другие вопросы по тегам