2014-04-22 73 views
2

有一个包含输入的一个DIV的值:无法获得输入法VAL()

enter image description here

这里的布局:

<div class="input-daterange input-group afc" id="datepicker-common-table"> 
    <input type="text" class="input-sm form-control" name="start" placeholder="Начальная дата"> 
    <span class="input-group-addon"> - </span> 
    <input type="text" class="input-sm form-control" name="end" placeholder="Конечная дата"> 
</div> 

这里是一个试图脚本在安装后获取数值:

$(document).on('change', "input[name='start']", function() 
{  
    $(document).on('change', "input[name='end']", function() 
    { 
     var startVal = $("#datepicker-common-table > input:text").val(); 
     var endVal = $("#datepicker-common-table > input:text").val(); 
     console.log(startVal + " - " + endVal); 
    }); 
}); 

因此,在控制台中获取以下内容翼输出:

enter image description here

+0

只是抬起头来。每次你的'input [name = start]'改变时,你都将另一个改变事件绑定到'input [name = end]'。你应该解除触发器,然后再次附加它 – CodingIntrigue

回答

1

看,你需要使用它提供的数据一起使用changeDate事件:

$("input[name='start']").datepicker({ 

}).on("changeDate", function(e) { 
    var selectedDate = e.date; // Get the date value from the event 
    console.log("Date Changed", e.date); 
}); 

因此,为您的使用情况(只有你想要在这两个被选中时记录日期):

var dates = { start: null, end: null }; 
$(".input-sm").datepicker({ 
    format: "dd-mm-yyyy", 
    todayBtn: "linked", 
    language: "en", 
    todayHighlight: true, 
    autoClose: true 
}).on("changeDate", function(e) { 
    dates[this.name] = e.date; 
    if(dates.start && dates.end) { 
     console.log("Both dates selected"); 
     console.log(dates.start); 
     console.log(dates.end); 
    } 
}); 

jsFiddle

+0

呃,谢谢,谢谢,非常非常感谢)))是工作! – Artem

2

尝试使用:

$(document).on('change', "input[name='start'],input[name='end']", function() { 
    var startVal = $("#datepicker-common-table > input[name='start']").val(); 
    var endVal = $("#datepicker-common-table > input[name='end']").val(); 
    console.log(startVal + " - " + endVal); 
}); 

由于您使用基于您的评论引导日期选择器,你需要使用事件changeDate()保持跟踪当日期改变时:

$("input[name='start'],input[name='end']").on('changeDate', function() { 
    var startVal = $("#datepicker-common-table > input[name='start']").val(); 
    var endVal = $("#datepicker-common-table > input[name='end']").val(); 
    console.log(startVal + " - " + endVal); 
}); 
+0

所以,也试过了,没有帮助:( – Artem

+0

它在这里工作正常:http://jsfiddle.net/n73yz/ – Felix

+0

@Artem您的datepicker绝对火灾'change' event? – CodingIntrigue

2

这里是你需要什么,你需要使用keyup事件:

$(document).ready(function(){ 
    $('#datepicker-common-table input[type="text"]').on('keyup',function(){ 



var startVal = $('#datepicker-common-table input[name="start"]').val(); 
var endVal = $('#datepicker-common-table input[name="end"]').val(); 

    alert(startVal); 

     }) 
    }); 

Here is Fiddle DEMO using Jquery 1.10.1

+0

所以也试过了,没有帮助:( – Artem

+0

他需要得到这些值,因为他们改变(即实时);这种静态分配不会帮助他。 –

+0

我加了小提琴演示,其工作检查脚本url是不是正确或你正在做一些其他的事情 –

1

请记住,所提供的回调是异步的,你不能保证你将不得不值即时访问。您可以将值推入队列,如果知道完成可以轮询的任务所需的最小长度,则轮询它。

这将轮询对象每秒查找属性上的非空值,一旦发现它们,它会停止,所以如果您需要持续观看,那么它将需要一些调整。

演示:在您的画面Fiddle

var inputValues = { 
    start: '', 
    end: '' 
} 
$(document).on('keyup', function() {  
    var start = $(document).find("input[name='start']").val(); 
    var end = $(document).find("input[name='end']").val(); 
    inputValues.start = start; 
    inputValues.end = end; 
}); 
var interval; 
interval = setInterval(function() { 
    var fullString; 
    if(inputValues.start != '' && inputValues.end != '') { 
     console.log("Start: " + inputValues.start + " End: " + inputValues.end); 
     clearInterval(interval); 
    } 
}, 1000); 
+0

为什么不检查每个'NAMES'如果你只是在推动一个活动,那么“改变”? – CodingIntrigue

+0

@Rraham我完全重写了它,让我知道你对这个udpated版本的看法。 –

+0

@RGraham我发现了一些东西,看这个http://joxi.ru/WDBWUxjKTJCQDjZP6XU和这个http://joxi.ru/mTBWUxjKTJDKfenHIZM现在如何得到这个日期 – Artem