2015-02-09 2 views
0

Возможная связанная ошибка с firebug: ... Невозможно вызвать методы в представлении списка до инициализации; попытался вызвать метод 'option'Javascript работает только с первого взгляда (первая страница) - jQuery Mobile

Я делаю это приложение, которое требует, чтобы вы набрали ответ определенного «уровня», чтобы перейти к следующему. Ответ находится в списке и должен отображаться только в точном соответствии для поиска. Ниже приведен мой html для первых двух страниц, и мой javascript для скрытия ответа до получения точного соответствия.

Однако он ТОЛЬКО работает на первом экране (страница) и не работает на втором, третьем, четвертом и так далее! Я действительно потратил время, пытаясь исправить это, и я потерялся. Единственная вещь, которая работала для меня до сих пор, - это prefetch-data = "true", но она работает только в некоторой степени и перестает работать после страницы 3. Другое дело, что я пытался реализовать множество решений, которые я нашел здесь и там, но никто не делает то, что я хочу. Я надеюсь, что есть какая-то простая вещь, которую я делаю неправильно.

Почему сценарий работает только на первом представлении и как его исправить?

<!DOCTYPE HTML> 
<html> 
    <head> 
    <meta charset="UTF-8"> 
     <title>PARestaurant</title> 
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"> 
      <link rel="stylesheet" href="css/main.css"> 
      <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.css" /> 
      <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
      <script src="http://code.jquery.com/mobile/1.3.1/jquery.mobile-1.3.1.min.js"></script> 
      <link rel="style" href="images"> 
      <style type="text/css"></style> 
      <script src="js/initOptions.js"></script> 
      <script src="js/messages.js"></script>  
      <script src="js/main.js"></script> 
    </head> 

    <body> 

<!-- Page Index 
Home Page 
Level Two 
Level Three 
Level Four 
--> 

<!-- -----------------------------------------------------------Home Page----------------------------------------------------------- --> 
     <div data-role="page" id="232114125125124124" data-theme="b"> 
     <div data-role="header" data-theme="a" align="center"> 
     <h1>Star Riddle</h1> 
     </div> 

     <div data-role="content" align="center"> 
      <div data-role="collapsible"> 
       <h2>Ready when you are!</h2> 
       <div> 
        <ul class="whatever" data-role="listview" data-filter="true" 
         data-filter-reveal="true" data-inset="true" 
         data-filter-placeholder=""> 
         <li data-filtertext="Green"><a href="#32432532462362345325235235">You are a genius!</a></li> 
        </ul> 
       </div> 
      </div> 
      <div id="blue"></div> <h2>+</h2> <div id="yellow"></div> 
     </div> 
     <div data-role="footer" align="center"> 
      <h1>Level 1</h1> 
     </div> 
     </div> 

<!-- -----------------------------------------------------------Level Two----------------------------------------------------------- --> 
     <div data-role="page" id="32432532462362345325235235" data-theme="b"> 
     <div data-role="header" data-theme="a" align="center"> 
     <h1>Star Riddle</h1> 
     </div> 
     <div data-role="content" align="center"> 
       <div data-role="collapsible"> 
       <h2> You know what to do! </h2> 
        <div> 
         <ul class="whatever" data-role="listview" data-filter="true" data-filter-reveal="true" data-inset="true" data-filter-placeholder=""> 
          <li data-filtertext="Level 1"><a href="#232114125125124124">Click me to go back!</a></li> 
          <li data-filtertext="Level 3"><a href="#534264363464327327">Up you go!</a></li> 
          <li data-filtertext="Level 4">You have to struggle a bit</li> 
          <li data-filtertext="Level 5">Not so fast</li> 
          <li data-filtertext="Level 6">No No NO!</li> 
          <li data-filtertext="Level 7">Stop it...</li> 
         </ul> 
        </div>`enter code here` 
        <div><p>Where do you wanna go?<p></div> 
       </div> 
     </div> 
     <div data-role="footer" align="center"> 
      <h1>Level 2</h1> 
     </div> 
     </div> 

JAVASCRIPT НИЖЕ

exactMatch = function(text, searchString) { 
    return !(text.toLowerCase() == searchString); 
    }; 
$(function() { 
    $(".whatever").listview('option', 'filterCallback', exactMatch); 
}); 

} 
+0

Вместо $ (function() {} используйте pageinit для каждой страницы (http://api.jquerymobile.com/1.3/pageinit/), потому что списки не инициализируются до тех пор, пока вы не посетите каждую страницу в первый раз. – ezanker

+0

thank вы для ответа, но я немного новичок в этом и не знаю, как правильно это реализовать? Должен ли я просто добавить что-то в свой сценарий или каждую страницу? – Psyduck

ответ

0

Вместо

$(function() {... 

Попробуйте что-то вроде этого:

$(document).on("pageinit", function(e) {  
    $(e.target).find(".whatever").listview('option', 'filterCallback', exactMatch); 
}); 

pageinit выполняется один раз в каждой посещаемой страницы инициализируется для первого время.

+0

Я спросил так много разных людей, включая некоторых «экспертов», и попробовал так много разных вещей, и вы просто исправили его. Очень полезно использовать javascript для конкретных повторяющихся элементов в многостраничном документе! – Psyduck

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