Что не так с этими заявлениями JQuery? - PullRequest
1 голос
/ 01 апреля 2010

Я не могу заставить этот оператор jquery работать при загрузке страницы, но он работает один раз, когда я обновляю F5 страницу.

<div id="ResultsDiv"></div>
<div id="pager" class="pager"></div>
<input id="HfId" type="hidden" />
<script type="text/javascript">
var itemsPerPage = 5;
$(document).ready(function() {
  getRecordspage(0, itemsPerPage);
  var maxvalues = $("#HfId").val();
  alert(maxvalues);
  $(".pager").pagination(maxvalues, {
    callback: getRecordspage,
    current_page: 0,
    items_per_page: itemsPerPage,
    num_display_entries: 5,
    next_text: 'Next',
    prev_text: 'Prev',
    num_edge_entries: 1
  });
});
</script>

На начальной загрузке страницы alert(maxvalues); ничего. Однако при обновлении отображается значение maxvalues, которое находится в скрытом поле HfId, поскольку оно назначено в функции getRecordspage.

.

Почему это странное поведение ... Любое предложение ...

EDIT:

function getRecordspage(curPage) {
    $.ajax({
        type: "POST",
        url: "Default.aspx/GetRecords",
        data: "{'currentPage':" + (curPage + 1) + ",'pagesize':5}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(jsonObj) {
            $("#ResultsDiv").empty();
            $("#HfId").val("");
            var strarr = jsonObj.d.split('##');
            var jsob = jQuery.parseJSON(strarr[0]);
            var divs = '';
            $.each(jsob.Table, function(i, employee) {
                divs += '<div class="resultsdiv"><br /><span class="resultName">' + employee.Emp_Name + '</span><span class="resultfields" style="padding-left:100px;">Category&nbsp;:</span>&nbsp;<span class="resultfieldvalues">' + employee.Desig_Name + '</span><br /><br /><span id="SalaryBasis" class="resultfields">Salary Basis&nbsp;:</span>&nbsp;<span class="resultfieldvalues">' + employee.SalaryBasis + '</span><span class="resultfields" style="padding-left:25px;">Salary&nbsp;:</span>&nbsp;<span class="resultfieldvalues">' + employee.FixedSalary + '</span><span style="font-size:110%;font-weight:bolder;padding-left:25px;">Address&nbsp;:</span>&nbsp;<span class="resultfieldvalues">' + employee.Address + '</span></div>';
            });
    $(".pager").pagination(strarr[1], {
             callback: getRecordspage,
             current_page: 0,
             items_per_page: 5,
             num_display_entries: 5,
             next_text: 'Next',
             prev_text: 'Prev',
             num_edge_entries: 1
         });
            $("#ResultsDiv").append(divs);
            $(".resultsdiv:even").addClass("resultseven");
            $(".resultsdiv").hover(function() {
                $(this).addClass("resultshover");
            }, function() {
                $(this).removeClass("resultshover");
            });
            $("#HfId").val(strarr[1]);
        }
    });
}

Ответы [ 3 ]

2 голосов
/ 01 апреля 2010

Ваша getRecordspage функция является асинхронной. Это делает Ajax-вызов, который, когда он завершает, устанавливает значение, которое вы пытаетесь прочитать. Однако вы не ожидаете завершения вызова, прежде чем прочитаете значение.

1 голос
/ 01 апреля 2010

Я думаю, что обратный вызов $ .ajax (...) success выполняется после вызова alert(maxvalues);. Если это действительно так, просто укажите код нумерации страниц

$(".pager").pagination(maxvalues, {
     //my syntax
});

в обратном вызове $ .ajax (...) success.

0 голосов
/ 01 апреля 2010

Без дополнительной информации о вашей проблеме (отсутствующие функции и т. Д.) Лучше всего советовать вам firefox и установить firebug и firequery .

Затем попробуйте установить некоторые контрольные точки и проверить значения. Вот учебник

РЕДАКТИРОВАТЬ: сделал этот ответ, прежде чем я увидел ваше редактирование с дополнительной информацией.

...