gpt4 book ai didi

jquery - Jeditable 和 jQuery UI Datepicker onblur 取消不适用于 showOn 按钮选项

转载 作者:行者123 更新时间:2023-12-01 00:28:55 30 4
gpt4 key购买 nike

我已将日期选择器配置为按以下方式激活

$(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,

我想实现这一点(详细说明如下)

  • 双击字段,加载输入类型日期选择器
  • 通过编辑数据或从日期选择器中选择新日期来更改数据
  • 通过从日历中选择日期来提交数据
  • 如果用户激活了可编辑插件,则 onblur:cancel 不起作用,除非我打开日历(如果用户点击其他地方,我想取消编辑)

但是我被困住了。你能帮我吗?

稍后编辑

重现问题的步骤

-获取 jquery、jquery-ui、jeditable 和附加的或来自 github 的插件代码- 在相应文件中添加引用的脚本-编写一个示例页面如下

<input type='editable_datepicker' value='2011-11-17'>

*点击它时,它应该打开文本框和一个漂亮的日历图标

如果单击该图标,则会出现日历

您可以提交日期并发送数据或点击其他地方(失去焦点)并且不发送数据

问题就在这里...

如果您激活该字段(使其可编辑),则无法使其消失(失去焦点),除非您激活日历

非常感谢。

最佳答案

我找到了一个我认为可以满足您要求的解决方案。与其尝试解释与您提供的示例的所有差异,不如向您展示我所做的事情的独立示例会更容易。

该示例使用 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 的私有(private)重置方法如何工作。如果原始父元素的 javascript 键“editing”设置为 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>

希望有帮助。干杯。

关于jquery - Jeditable 和 jQuery UI Datepicker onblur 取消不适用于 showOn 按钮选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8166916/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com