Я, кажется, ошибаюсь в следующем: 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 загружается дважды, а глушитель автозаполнения исчезает при наведении мыши. Здесь есть парадокс, и я бы хотел, чтобы оба работали.
Спасибо за вашу помощь, Джорис
У меня есть догадка, что ваш файл personal.html является main.html, адресованным в коде. В противном случае я не вижу, где вы загружаете person.html или что вы загружаете при загрузке main.html.
Почему вы добавляете 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 () {
});
});
В-третьих: независимо от того, какой слушатель нужно установить для динамических элементов, делегируйте их в документ, чтобы избежать необходимости его повторного использования (с риском двойной привязки). Я не вижу примеров этого в вашем первоначальном посте, но если у вас есть случай щелчка, фокуса или размытия слушателей (чтобы назвать несколько), я включу практический пример.