jQuery Mobile .delegate () не запущен - PullRequest
3 голосов
/ 23 декабря 2011

Я довольно новичок в jQuery и немного борюсь с проблемой, связанной с делегированием. В моем коде у меня есть динамическая страница, загруженная:

    $("#results").delegate('li', 'click', function(evt){
      var queryData = "id=" + $(this).attr("id");
      if ( $(this).attr("id") ){
        $.ajax({
          type: "GET",
          url:  "wiw_detail_page.html",
          data: queryData,
          beforeSend: onDetailBeforeSend,
          success: onDetailSuccess,
          error: onError
        });
      }
      else
      {
        alert("Please select an Employee from the list");
      }
        return false;
    });

Это функция onDetailSuccess:

    function onDetailSuccess( data, status ){
      $("body").append( data );
      $("#wiw_detail_page").page( );
      $.mobile.changePage( "#wiw_detail_page", { transition: 'slide' } );
    }

Все работает хорошо, так как моя первая страница перемещена в "wiw_details_page". Внутри новой страницы у меня есть список полей, под разборным, вот так:

  <div data-role="collapsible" data-collapsed="false" data-theme="b" id="comData">
    <h2>Communication Data</h2>
    <div id="communicationData">
      <fieldset>
        <label for="address">Address:</label>
        <a href="#locationMap">
          <input class="goMap" type="text" 
                 name="address" id="address" 
                 disabled="true" 
                 value="<%=employeeprofile-building%>"/>
        </a>
      </fieldset>
    </div>
  </div>

Мне нужно прикрепить обработчик щелчков к полю ввода адреса, и поскольку эта страница еще не создана в $ (document) .ready (), я прикрепил к ней делегата следующим образом:

    // Use delegation, since detail view is not availble at document.ready time:
    $("#wiw_detail_page").delegate('input.goMap','click', function(evt){
      if ( $(this).attr( "id" ) == 'address' ){
        alert("Click!");
        if ( navigator.geolocation ) {
          detectBrowser( );
          navigator.geolocation.getCurrentPosition( function( position ){
            newInitialize( position.coords.latitude, position.coords.longitude );
          })
        }else{
          detectBrowser( );
          newInitialize(45.06150, 7.65599);
        }
      }
     });

    });

Это делегирование никогда не происходит, и когда я щелкаю по полю ввода, ничего не происходит (даже никаких ошибок).

Я также пытался изменить селектор на:

    $("#comData").delegate('input.goMap','click', function(evt)

И, как отчаянная попытка, я изменил его на:

    $("body").delegate('input.goMap','click', function(evt)

Любая подсказка?

Извините за такой длинный вопрос и заранее спасибо, R.

1 Ответ

0 голосов
/ 28 декабря 2011

Хотите попробовать #communicationData, например:

$("#communicationData").delegate('input.goMap','click', function(evt) {...}
...