2015-04-26 5 views
0

У меня проблема с bootstrap datepicker. Я очень старался найти решение, но, к сожалению, я не могу найти решение.Как сделать BootStrap-DatePicker Stop Отправить форму

Описание проблемы Bootstrap Datepicker делает вызовы сервером веб-приложений ненужными. Или, может быть, я могу сказать это, не прося об этом.

Моя форма

<form class="fill" action="<% testbeanHandle.dummy(); %>" id="inputForm"> 
<label class="control-label" >Date:</label> 
<input value="2015-01-14" type="text" name="pickedDate" style="width: 160px;" id="datepicker"/> 
</form> 

Моя библиотека

  • CSS/bootstrap.min.css
  • JS/JQuery-2.1.3.min.js
  • JS /bootstrap.min.js
  • css/bootstrap-da tepicker.css
  • JS/бутстраповские-datepicker.min.js

Мой JavaScript

$(document).ready(function() { 
//AJAX to call the Web Server, when it detects any change in form. 
$('#inputForm').change(function(e) { 
    e.preventDefault(); 
    var form = $(this); 
    var post_data = form.serialize(); 

    $.ajax({ 
     type: 'POST', 
     data: post_data, 
     success: function() { 
     } 
    }); 
    }); 

    $('#datepicker').datepicker({ 
     format: "yyyy-mm-dd", 
     todayBtn: "linked", 
     clearBtn: true, 
     calendarWeeks: true, 
     autoclose: true, 
     todayHighlight: true, 
     orientation: "top left" 
     }); 

}); 

My Server Side Bean

@Named("testbean") 
@SessionScoped 
public class testBean implements testapi,Serializable { 
    @Override  
    public void dummy() { 
      Date dNow = new Date(); 
      SimpleDateFormat ft = 
      new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss a zzz"); 
      System.out.println(ft.format(dNow)+": " 
        +"See I am called.."); 
    } 
} 

Проблема

Фраза «Смотрите, что я звонила ..» должна была быть напечатана только на консоли Web Server, что тоже каждый раз, когда Дата изменяется.

Но фраза «Смотрите, я звонила» была напечатана три раза каждый, и когда была изменена дата. Это означает, что при изменении даты дважды выполняется вызов веб-сервера.

Info: 2015-04-26 01:49:22 PM CEST: See I am called.. 
Info: 2015-04-26 01:49:23 PM CEST: See I am called.. 
Info: 2015-04-26 01:49:23 PM CEST: See I am called.. 

Примечание: Я пытался удалить бутстрапом Datepicker и имел поле даты в виде простого текстового поля. После этого проблема исчезает. Но проблема в том, что я использую Bootstrap Datepicker Plugin.

Могу ли я узнать, как решить эту проблему Благодаря

+0

не уверен, но, может быть, бутстрап скрывает пустое поле ввода и создает на нем датупиксера, и всякий раз, когда изменяется датапикер, значение этого простого ввода также изменяется, вызывая два события изменения, вызываемых, почему бы не вызвать ajax при изменении даты сам. – vinayakj

ответ

0

спасибо за все ответ.

Первый

Infact Я не комфортно в использовании Ajax вызова внутри самого Datepicker события изменения. Поскольку форма, которую я обрабатываю, не только имеет DatePicker, она также должна иметь другие поля ввода. Поэтому я исключаю, что метод

Второй
Ловля предыдущие данные отправить явно другой вариант send_data = post_data; Который работает для меня

Третьего

Однако я обнаружил проблему и способ исправить это без обходного пути.

я сделал следующие изменения в Datepicker для Bootstrap v1.4.0 (бутстраповский-datepicker.js)

Под SetValue Функции вызова

Я видел заявление

this.element.find('input').val(formatted).change(); 

Это срабатывает, когда Datepicker Показывает представление календаря и скрывает вид календаря.

Следовательно, он делает звонок на веб-платформу. Потому что я предполагаю, что он отслеживает событие изменения ввода поля ввода текста. Над которым сидит дата-подборщик. (Не уверен, хотя)

Так мне удалось изменить это на

this.element.find('input').val(formatted).change(function(e){e.preventDefault();}); 

В библиотеке, и я вижу, что мой вопрос получил fixedc.

Спасибо вам большое. И я надеюсь, что это поможет кому-то.

0

Самый простой способ запомнить последние данные посыла и не посылаем их, если они идентичны, и ничего не изменилось.

$(document).ready(function() { 
var send_data=''; 
$('#inputForm').change(function(e) { 
    e.preventDefault(); 
    var form = $(this); 
    var post_data = form.serialize(); 
    if (post_data !== send_data) { 
    send_data = post_data; 
    $.ajax({ 
     type: 'POST', 
     data: post_data, 
     success: function() { 
     } 
    }); 
    } 
    }); 
.... 

НТН Georg

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