2013-12-16 4 views
0

я, кажется, сделать ошибку в следующем: HTML: index.html, main.html, и т.д. ЯШ: 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 загружается дважды, а автозаполнение drowdown исчезает при наведении мыши. Вид парадокса здесь, и я хотел бы, чтобы оба работали.

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

ответ

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

  2. Почему Вы добавляете Typ-persons.js в persons.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 в этом АЯКС вызов, вы должны дать новые кнопки их поведение где-то, не так ли? Попытайтесь сделать это после, они добавляются, используя обратный вызов jQuery. Я бы рекомендовал вам использовать получить метод вместо загрузить, чтобы иметь немного больше контроля над новым контентом.Вместо

$("#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

Hi, сначала спасибо. Для точки 1, да, вы правы, у меня также есть файл main.html и некоторые другие, я должен был изменить это здесь, чтобы было ясно. Для пункта 2 я попытался изменить его, чтобы быть в индексе и в файле лиц.html. (Так загрузили его один раз), что не имеет никакого значения. – Joris

+0

Хорошо, но я все еще не понимаю. ¿Является ли person.html загруженным в одиночку или загружается в один div index.html? – amenadiel

+0

Индекс.html - это единственная страница, которая загружается. Все остальные страницы загружаются в div «content». Проблема возникает с использованием JQuery UI, который загружается с index.html. Но когда вызывается в js, который загружается с помощью person.html (в div), он не работает. Когда я добавляю его в person.html (двойная загрузка jquery ui), кнопки работают, но выпадающее окно автозаполнения для текстового поля затем исчезает, когда мышь перемещается по нему. (Я знаю, что это результат двойной загрузки). Проблема в том, что мне нужен JQuery UI для индекса и всех других страниц, загружаемых в div. – Joris

Смежные вопросы