Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: jquery ajax после выполнения поднимает кролл
 
 автор: Sharax   (19.09.2014 в 14:39)   письмо автору
 
 

Здравствуйте!
По кнопке "заказать" должен отправляться ajax запрос на сервер, он отправляется и обрабатывается, все ок, но после выполнения $result.html(str[0]); скролл в браузере поднимается на самый верх!

Ф-ия отправки:


<script type="text/javascript">
function run_script(myj) {
  var $result = $("#kkl"+myj); 
  $.ajax({
    type: "POST", // - методом POST.
    data: { // - получаем значения полей, данные.
      "j": myj,
      "min": $(\'#zap\'+myj).val()
    },
    dataType: "html", // - тип HTML.
    url: "get_ajax.php", // - скрипт PHP.
    beforeSend: function() { 
      // Перед отправкой выведем уведомление:
     // $result.html("<div>Подождите...</div>");
    },
    success: function(data) {
    //  $result.html(data); // - выполнено.
    var str = data.split("^");
    $result.html(str[0]);
    },
  });
}
</script>


Подскажите, может быть нужно что-то где-то дописать? Или например отправлять на сервер еще параметр вертикального скролла и потом скроллить на то же место... Уместно ли это здесь? И если да, то как это лучше реализовать?

  Ответить  
 
 автор: Commander   (19.09.2014 в 14:48)   письмо автору
 
   для: Sharax   (19.09.2014 в 14:39)
 

-

  Ответить  
 
 автор: Sharax   (19.09.2014 в 15:28)   письмо автору
 
   для: Sharax   (19.09.2014 в 14:39)
 

Сделал так:


<script type="text/javascript">
 function scrolldown(sc)
     {
     window.parent.scrollTo(0,sc);
     return false; 
     }
function run_script(myj) {
  var $result = $("#kkl"+myj); 
  var  myposTop = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
  $.ajax({
    type: "POST", // - методом POST.
    data: { // - получаем значения полей, данные.
      "nam": $(\'#nam\'+myj).val(), 
      "distrib": $(\'#distrib\'+myj).val(),
      "j": myj,
      "up": $(\'#up\'+myj).val(),
      "zap": $(\'#zap\'+myj).val(),
      "cen": $(\'#cen\'+myj).val(),
      "min": $(\'#zap\'+myj).val(),
      "zc": $(\'#zc\'+myj).val()
    },
    dataType: "html", // - тип HTML.
    url: "get_ajax.php", // - скрипт PHP.
    beforeSend: function() { 
      // Перед отправкой выведем уведомление:
     // $result.html("<div>Подождите...</div>");
    },
    success: function(data) {
    //  $result.html(data); // - выполнено.
    var str = data.split("^");
    $result.html(str[0]);
    scrolldown(myposTop);
    },
  });
}
</script>


Экран дергается наверх и вниз теперь

  Ответить  
 
 автор: confirm   (19.09.2014 в 16:03)   письмо автору
 
   для: Sharax   (19.09.2014 в 15:28)
 

Само по себе прокручивание страницы не произойдет, так что сперва ищите в коде причину ее. А то что дергается теперь после добавления, это доказательство этому, ибо есть метод который вверх крутит, а вы теперь в обратном направлении заставляете это делать. Анализируйте код.

А вообще, если jQuery, то прокрутка в нем:


//возвращает объект для скролла document
$.fn.doc = function(){
    return this.map(function(){
        var e = this,
             isWin = !e.nodeName || $.inArray( e.nodeName.toLowerCase(), ['html','body'] ) != -1;
        if(!isWin) return e;
        var doc = (e.contentWindow || e).document || e.ownerDocument || e;
        return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ? doc.body : doc.documentElement;
    });
};

$(function() {
   //после загрузки страницы определить документ скроллинга
   wnd = $(window).doc();
   //теперь можно корректно производить скроллинг в различных браузерах, включая анимацию
   //прокрутить страницу в начало
   wnd.animate({scrollTop:0}, speed); 
});

  Ответить  
 
 автор: Sharax   (19.09.2014 в 16:14)   письмо автору
 
   для: confirm   (19.09.2014 в 16:03)
 

Да, действительно, если создать голую страницу с кодом запроса то не крутит наверх.. Только вот как теперь найти причину? Которая крутит его...

  Ответить  
 
 автор: confirm   (19.09.2014 в 16:19)   письмо автору
 
   для: Sharax   (19.09.2014 в 16:14)
 

Ну как, анализируйте код, ищите метод/функцию, которая это делает.

  Ответить  
 
 автор: Sharax   (19.09.2014 в 17:02)   письмо автору
 
   для: confirm   (19.09.2014 в 16:19)
 

У меня есть пустой пример где все работает и такой-же, но там скролл поднимается наверх, смотрите

1. (тут все работает)


<html>
<head>
 <meta charset="utf-8">
<title>JQuery + Ajax + PHP</title>
<script src="jq.js"></script>
<script type="text/javascript">
function run_script() {
  var $result = $("#status"); 
  $.ajax({
    type: "POST", // - методом POST.
    data: { // - получаем значения полей, данные.
      "area_1": $('#area_1').val(), 
      "area_2": $('#area_2').val()
    },
    dataType: "html", // - тип HTML.
    url: "get_ajax.php", // - скрипт PHP.
    beforeSend: function() { 
      // Перед отправкой выведем уведомление:
      $result.html('<div>Подождите...</div>');
    },
    success: function(data) {
    //  $result.html(data); // - выполнено.
    var str = data.split("^");
    $result.html(str[0]);
    },
  });
}
</script>
</head>
<body>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<div class="container-fluid">
      <div class="row-fluid">
           <div id="status"> </div>
           <form method="post" action="get_ajax.php">
           <input type=text id="area_1" name="area_1"><br>
           <input type=text id="area_2" name="area_2"><br>
           <input type="button" value="Запустить пример!" onclick="run_script()">
          </form>
     </div> 
</div> 
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
</body>
</html>


2. а тут скролл скроллится наверх


<html>
<head>
<script src='jq.js'></script> 
<script type="text/javascript"> 
function run_script() { 
  var $result = $("#kkl1");  
  $.ajax({ 
    type: "POST", // - методом POST. 
    data: { // - получаем значения полей, данные. 
      "kolvo": $('#k1_kolvo').val()
    }, 
    dataType: "html", // - тип HTML. 
    url: "get_test_ajax.php", // - скрипт PHP. 
    beforeSend: function() {  
      // Перед отправкой выведем уведомление: 
     // $result.html("<div>Подождите...</div>"); 
    }, 
    success: function(data) { 
    //  $result.html(data); // - выполнено. 
    var str = data.split("^"); 
    if (str[0] == "error1") {alert("Некорректно заполнено поле кол-во товара!");}
    else
         {
         $result.html(str[0]); 
         }
    }, 
  }); 

</script> 
</head>
<body>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 
                                      <input type=text  id='k1_kolvo'>
                                      <div id=kkl1>
                                      <a href='#' onclick='run_script()'>заказать</a>
                                      </div> 
 
 
 <br><br><br><br><br><br><br>
</body>
</html>


Почему так во втором???

  Ответить  
 
 автор: Sharax   (19.09.2014 в 17:33)   письмо автору
 
   для: Sharax   (19.09.2014 в 17:02)
 

Всё, я идиот, я понял, срабатывало a href при вызове ф-ии

  Ответить  
 
 автор: confirm   (19.09.2014 в 17:42)   письмо автору
 
   для: Sharax   (19.09.2014 в 17:33)
 

Это не href, а якорь на странице, именно из-за # этого и происходит переход на первый якорь на странице.

А вот первый пример тоже полный бардак, как собственно и второй тоже, а должно быть типа:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function() {
    $('form').submit(function() {
        var $result = $("#kkl1");   
        $.ajax({  
            type: "POST", // - методом POST.  
            data: { // - получаем значения полей, данные.  
                this.serializeArray() //вот так надо получать данные формы
            },  
            dataType: "json", // есть JSON, это гораздо лучше чем split("^")   
            url: "get_test_ajax.php", // - скрипт PHP.  
            beforeSend: function() {   
            
            },  
            success: function(data) {  
                //  $result.html(data); // - выполнено.  
                var str = data.split("^"); //здесь лучше JSON, а не split("^") 
                if (str[0] == "error1") {alert("Некорректно заполнено поле кол-во товара!");} 
                else $result.html(str[0]);  
            }  
        });
        return false; //прерывать надо отправку формы
    }); 
});
</script>    
</head>
<body>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> 
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> 
<div class="container-fluid"> 
      <div class="row-fluid"> 
           <div id="status"> </div> 
           <form> <!-- не нужно здесь ни method="post" action="get_ajax.php", отправляет Ajax-->
           <input type=text id="area_1" name="area_1"><br> 
           <input type=text id="area_2" name="area_2"><br> 
           <input type="button" value="Запустить пример!" /> 
          </form> 
     </div>  
</div>  
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> 
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования