我已将datepicker配置为激活,如下所示
$(function () {
$(".editable_datepicker").click(function (event) {
$(this).editable('ajax_save.php',{
id : 'id',
type : 'datepicker',
style : 'margin:0px;width:80%;display:inline',
onblur : 'submit',
tooltip : ''
});
});
});
我正在使用这个插件
来源:https://github.com/qertoip/jeditable-datepicker/blob/master/src/jquery.jeditable.datepicker.js
jQuery.expr[':'].focus = function( elem ) {
return elem === document.activeElement && ( elem.type || elem.href );
};
$.editable.addInputType( 'datepicker', {
element: function( settings, original ) {
var form = $( this ),
input = $( '<input />' );
input.attr( 'autocomplete','off' );
form.append( input );
settings.onblur = 'nothing';
return input;
},
plugin: function( settings, original ) {
var form = this, input = form.find( "input" );
settings.onblur = 'nothing';
input.datepicker( {
dateFormat:'yy-mm-dd',
showOn: "button",
buttonImage: "img/calendar_icon.gif",
buttonImageOnly: true,
onSelect: function() {
form.submit();
},
onClose: function() {
setTimeout( function() {
if ( !input.is( ':focus' ) ) {
original.reset( form );
} else {
form.submit();
}
}, 150 );
}
} );
}
} );
只要我不在此插件中添加以下选项
,此插件就能成功运行 showOn: "button",
buttonImage: "img/calendar_icon.gif",
buttonImageOnly: true,
我想实现这个目标(详细解释如下)
但我被困住了。你能救我吗?
稍后编辑
重现问题的步骤
-get jquery,jquery-ui,jeditable和附加的插件代码或来自github - 在相应文件中添加引用的脚本 - 编写一个示例页面,如下所示
<input type='editable_datepicker' value='2011-11-17'>
*点击它时,它应该打开文本框和一个漂亮的日历图标
如果您点击图标,则会显示日历
您可以提交日期并发送数据 或点击其他地方(失去焦点)并且不发送数据
问题出在这里......
如果您激活该字段(使其可编辑),除非您激活日历,否则无法使其消失(失去焦点)
非常感谢。
答案 0 :(得分:1)
我找到了一个我认为符合您要求的解决方案。与其尝试解释与您提供的示例的所有差异,而不是向您展示我所做的独立示例会更容易。
该示例使用jquery,jquery-ui和jeditable。我没有使用jquery.jeditable.datepicker.js,而只是使用$ .editable的addInputType方法:
$(function () {
$.editable.addInputType('datepicker', {
element: function(settings, original) {
var input = $('<input />');
input.attr('autocomplete', 'off');
$(this).append(input);
// rather than assigning plugin separately, I'm just adding it here
// (but doing it this way isn't critical to this solution)
input.datepicker({
dateFormat:'yy-mm-dd',
showOn: "button",
buttonImage: "calendar_icon.gif",
buttonImageOnly: true,
beforeShow: function() {
var editable_datepicker = $(this).parent().parent().get(0);
// This is the heart of the solution:
editable_datepicker.editing = false;
},
onClose: function(a, b) {
var form = $(this).parent();
form.submit();
}
});
return input;
}
});
});
此解决方案的关键在于$ .editable的私有重置方法如何工作。如果原始父元素的javascript键&#34;编辑&#34;它将不会重置(取消)输入。设置为false。我只是使用.datepicker在beforeShow之前设置它。
以下是此示例的剩余代码:
$(function() {
$(".editable_datepicker").editable('ajax_save.php',{
id : 'id',
type : 'datepicker',
style : 'margin:0px;width:80%;display:inline',
onblur : 'cancel', // use 'cancel'!
tooltip : 'Double click to edit',
event : 'dblclick'
});
});
HTML:
<span class='editable_datepicker'>01/01/2012</span>
希望有所帮助。欢呼声。