Пользовательский интерфейс jQuery не загружается на $ («# content»). страница загрузки для .button

0

Я, кажется, ошибаюсь в следующем: html: index.html, main.html и т.д. Js: jQuery, jQuery UI, own.js, own_main.js

Конечный результат должен быть индексной страницей, которая на основе выбора меню загружает html в div. HTML, который загружается, имеет элемент кнопки, который я хочу использовать с пользовательским интерфейсом jQuery.

Index.html

<html lang="us">
<head>
<meta charset="utf-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Dev</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="css/kendo.dataviz.default.min.css" rel="stylesheet" />
<link href="css/kendo.dataviz.min.css" rel="stylesheet" />
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
<link rel="stylesheet" href="css/main.css">
<link href="css/jquery-ui-1.10.3.custom.css" rel="stylesheet">
<link href="css/typ.css" rel="stylesheet" />
<script src="js/modernizr-2.6.2-respond-1.1.0.min.js"></script>
<script src="Scripts/jquery-2.0.3.js"></script>
<script src="js/jquery-ui-1.10.3.custom.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/typ.js"></script>
<script src="js/typ-persons.js"></script>
</head>
<body>    
<div id="content"></div>
</body>
</html>

Файл typ.js

function currentLoc(goToLoc) {
    if (CheckLogin() == 0) {
        //Not logged in, go to main
        $("#content").load("/main.html");
        window.localStorage.globalLocation = "/main.html";
    } else {
        if (goToLoc == '') {
            console.log("No GoToLoc: " + goToLoc);
            if (window.localStorage.globalLocation == '') {
                console.log("No Global location");
                $("#content").load("/main.html");
                window.localStorage.globalLocation = "/main.html";
            } else {
                console.log("Global Location " + window.localStorage.globalLocation);
                $("#content").load(window.localStorage.globalLocation);
            }
        } else {
            console.log("GoToLoc " + goToLoc);
            $("#content").load(goToLoc);
            window.localStorage.globalLocation = goToLoc;
        }
    }
}

persons.html

<script src="js/typ-persons.js"></script>

<div class="container">

    <style>
        #toolbar {
            padding: 4px;
            display: inline-block;
        }
        /* support: IE7 */
        * + html #toolbar {
            display: inline;
        }
    </style>
    <div id="toolbar" style="width:100%;" class="ui-widget-header ui-corner-all">
        <button id="btnNew" ></button>
        <button id="btnSave"></button>
        <label for="persons">Find Person by Name or ID: </label>
        <input type="text" class="input-sm" id="persons">
        <input type="hidden" id="person-id">
    </div>
</div>

Typ-persons.js

$(function () {
    $("#btnNew").button({
        text: false,
        label: "New Person",
        icons: {
            primary: "ui-icon-document"
        }
    })
   .click(function () {

   });
    $("#btnSave").button({
        text: false,
        label: "Save",
        disabled: true,
        icons: {
            primary: "ui-icon-disk"
        }
    })
    .click(function () {

   });
});

На странице лиц есть также элемент автозаполнения с данными json. Это работает как шарм. Проблема в том, что на панели инструментов не используются кнопки, применяемые от typ-persons.js. Когда я добавляю пользовательский интерфейс jQuery в person.html, кнопки работают и оформляются так, как они должны. Тогда проблема заключается в том, что пользовательский интерфейс jQuery загружается дважды, а глушитель автозаполнения исчезает при наведении мыши. Здесь есть парадокс, и я бы хотел, чтобы оба работали.

Спасибо за вашу помощь, Джорис

1 ответ

1
Лучший ответ
  1. У меня есть догадка, что ваш файл personal.html является main.html, адресованным в коде. В противном случае я не вижу, где вы загружаете person.html или что вы загружаете при загрузке main.html.

  2. Почему вы добавляете typ-persons.js в person.html, если у вас уже есть его в главном html файле? В способе добавления он будет двойным привязкой при нажатии кнопки. Не раз я верю. Он будет работать при первой нагрузке, а затем корректно поменять кнопку кнопки.

EDIT: После разъяснений ОП, это мои предложения.

Во-первых: вместо того, чтобы помещать новый JS в html лиц, сделайте его просто простым html. Убедитесь, что вы не используете атрибуты идентификатора, когда этот контент подвержен загрузке несколько раз. В этом случае лучше всего использовать классы.

<div class="container">
    <style>
        #toolbar {
            padding: 4px;
            display: inline-block;
        }
        /* support: IE7 */
        * + html #toolbar {
            display: inline;
        }
    </style>
    <div id="toolbar" style="width:100%;" class="ui-widget-header ui-corner-all">
        <button class="btnNew" ></button>
        <button class="btnSave"></button>
        <label for="persons">Find Person by Name or ID: </label>
        <input type="text" class="input-sm" id="persons">
        <input type="hidden" id="person-id">
    </div>
</div>

Во-вторых: поскольку вы не будете загружать новый JS в этот вызов ajax, вам нужно придать новым кнопкам свое поведение где-то, верно? Попытайтесь сделать это после их добавления, используя обратный вызов jQuery. Я бы рекомендовал вам использовать метод get вместо загрузки, чтобы иметь немного больше контроля над новым контентом. Вместо

 $("#content").load("/persons.html");

Пытаться

$.get("/persons.html",function(responseText) {
    var newElement=jQuery(responseText);
    $("#content").append(newElement);
    $(".btnNew", newElement).button({
        text: false,
        label: "New Person",
        icons: {
            primary: "ui-icon-document"
        }
    }).click(function () {

    });

    $(".btnSave",newElement).button({
        text: false,
        label: "Save",
        disabled: true,
        icons: {
            primary: "ui-icon-disk"
        }
    }).click(function () {

    });

});

В-третьих: независимо от того, какой слушатель нужно установить для динамических элементов, делегируйте их в документ, чтобы избежать необходимости его повторного использования (с риском двойной привязки). Я не вижу примеров этого в вашем первоначальном посте, но если у вас есть случай щелчка, фокуса или размытия слушателей (чтобы назвать несколько), я включу практический пример.

  • 0
    Привет, прежде всего спасибо. Что касается пункта 1, да, вы правы, у меня также есть файл main.html и некоторые другие, я должен был изменить это здесь, чтобы прояснить ситуацию. Что касается пункта 2, я попытался изменить его, чтобы он был в индексе и в файле persons.html. (Так загрузил его один раз), что не имеет никакого значения.
  • 0
    Хорошо, но пусть я все еще не понимаю. Persons Person.html предназначен для загрузки отдельно или загружен в один div файла index.html?
Показать ещё 3 комментария

Ещё вопросы

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