javascript - 取消选中复选框时如何清除 jquery.businesshours 中文本字段的值?
问题描述
我想清除startTime
和值的endTime
值。问题是,它们textboxes
都具有相同的名称,所以如果我清除一个,它们都会被清除。我不确定如何仅选择特定实例,因为它们都具有相同的名称……这就是jquery.businesshours
操作方式。
下面会清除文本字段,但会清除所有这些字段。
container.find("[name='startTime[]']").val('');
下面是javascript代码
/**
jquery.businessHours v1.0.1
https://github.com/gEndelf/jquery.businessHours
requirements:
- jQuery 1.7+
recommended time-picker:
- jquery-timepicker 1.2.7+ // https://github.com/jonthornton/jquery-timepicker
**/
(function($) {
$.fn.businessHours = function(opts) {
var defaults = {
preInit: function() {
},
postInit: function() {
},
inputDisabled: false,
checkedColorClass: "WorkingDayState",
uncheckedColorClass: "RestDayState",
colorBoxValContainerClass: "colorBoxContainer",
weekdays: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
operationTime: [
{},
{},
{},
{},
{},
{isActive: false},
{isActive: false}
],
defaultOperationTimeFrom: '',
defaultOperationTimeTill: '',
defaultActive: !0,
//labelOn: "Working day",
//labelOff: "Day off",
//labelTimeFrom: "from:",
//labelTimeTill: "till:",
containerTmpl: '<div class="clean"/>',
dayTmpl: '<div class="dayContainer">' +
'<div data-original-title="" class="colorBox"><input type="checkbox" class="invisible operationState"/></div>' +
'<div class="weekday"></div>' +
'<div class="operationDayTimeContainer">' +
'<div class="operationTime"><input type="text" name="startTime[]" class="mini-time operationTimeFrom" value=""/></div>' +
'<div class="operationTime"><input type="text" name="endTime[]" class="mini-time operationTimeTill" value=""/></div>' +
'</div></div>'
};
var container = $(this);
function initTimeBox(timeBoxSelector, time, isInputDisabled) {
timeBoxSelector.val(time);
if(isInputDisabled) {
timeBoxSelector.prop('readonly', true);
}
}
var methods = {
getValueOrDefault: function(val, defaultVal) {
return (jQuery.type(val) === "undefined" || val == null) ? defaultVal : val;
},
init: function(opts) {
this.options = $.extend(defaults, opts);
container.html("");
if(typeof this.options.preInit === "function") {
this.options.preInit();
}
this.initView(this.options);
if(typeof this.options.postInit === "function") {
//$('.operationTimeFrom, .operationTimeTill').timepicker(options.timepickerOptions);
this.options.postInit();
}
return {
serialize: function() {
var data = [];
container.find(".operationState").each(function(num, item) {
var isWorkingDay = $(item).prop("checked");
var dayContainer = $(item).parents(".dayContainer");
data.push({
isActive: isWorkingDay,
timeFrom: isWorkingDay ? dayContainer.find("[name='startTime[]']").val() : null,
timeTill: isWorkingDay ? dayContainer.find("[name='endTime[]']").val() : null
});
});
return data;
}
};
},
initView: function(options) {
var stateClasses = [options.checkedColorClass, options.uncheckedColorClass];
var subContainer = container.append($(options.containerTmpl));
var $this = this;
for(var i = 0; i < options.weekdays.length; i++) {
subContainer.append(options.dayTmpl);
}
$.each(options.weekdays, function(pos, weekday) {
// populate form
var day = options.operationTime[pos];
var operationDayNode = container.find(".dayContainer").eq(pos);
operationDayNode.find('.weekday').html(weekday);
var isWorkingDay = $this.getValueOrDefault(day.isActive, options.defaultActive);
operationDayNode.find('.operationState').prop('checked', isWorkingDay);
var timeFrom = $this.getValueOrDefault(day.timeFrom, options.defaultOperationTimeFrom);
initTimeBox(operationDayNode.find('[name="startTime[]"]'), timeFrom, options.inputDisabled);
var endTime = $this.getValueOrDefault(day.timeTill, options.defaultOperationTimeTill);
initTimeBox(operationDayNode.find('[name="endTime[]"]'), endTime, options.inputDisabled);
});
container.find(".operationState").change(function() {
var checkbox = $(this);
var boxClass = options.checkedColorClass;
var timeControlDisabled = false;
if(!checkbox.prop("checked")) {
// disabled
boxClass = options.uncheckedColorClass;
timeControlDisabled = true;
}
checkbox.parents(".colorBox").removeClass(stateClasses.join(' ')).addClass(boxClass);
checkbox.parents(".dayContainer").find(".operationTime").toggle(!timeControlDisabled);
}).trigger("change");
if(!options.inputDisabled) {
container.find(".colorBox").on("click", function() {
var checkbox = $(this).find(".operationState");
checkbox.prop("checked", !checkbox.prop('checked')).trigger("change");
});
}
}
};
return methods.init(opts);
};
})(jQuery);
解决方案
基于用于清除输入的注释中的以下代码:
if(!options.inputDisabled) {
container.find(".colorBox").on("click", function() {
var checkbox = $(this).find(".operationState");
checkbox.prop("checked", !checkbox.prop('checked')).trigger("change");
container.find(.dayContainer[data-weekday="4"] [name='startTime[]']).val('');
container.find(.dayContainer[data-weekday="4"] [name='endTime[]']).val('');
});
我们可以更改 onClick 处理程序以更改与.colorBox
.
if (!options.inputDisabled) {
container.find(".colorBox").on("click", function(event) {
var checkbox = $(this).find(".operationState");
checkbox.prop("checked", !checkbox.prop('checked')).trigger("change");
var $dayContainer = $(event.target).closest('.dayContainer');
$dayContainer.find('[name="startTime[]"]').val('');
$dayContainer.find('[name="endTime[]"]').val('');
});
}
推荐阅读
- nltk - 在 WordNet 的同义词集级别上使用引理关系可以得到哪些潜在错误?
- r - 如何使用 R 操作多个变量(79x1532)?
- vega-lite - 如何更改代码以便图表显示?
- javascript - 在创建新 div 时显示 div/section 内的内容
- javascript - 选项卡打开/关闭时在 localStorage 中保存数据时的数据竞争
- python-3.x - 将 gzip 文件从 s3 摄取到 Postgres 用于编码“UTF8”的无效字节序列
- ios - 使用 Apple 登录:错误:注册未完成
- autohotkey - 在 RDP 中为 AutoHotKey 脚本发送不区分大小写的热键
- python - 使用边界框进行数据增强
- rx-java - 当 Flowable 通过热观察者创建工作时尊重背压