summaryrefslogtreecommitdiffstats
path: root/dev/jquery.jtable.forms.js
diff options
context:
space:
mode:
authorHalil İbrahim Kalkan <hikalkan@gmail.com>2013-01-30 21:48:29 +0200
committerHalil İbrahim Kalkan <hikalkan@gmail.com>2013-01-30 21:48:29 +0200
commitccb806db75fc25f02a704171b248cae04fd1a497 (patch)
treeb6f5fd5afb9a2bfb3f4495ea10674c88251a84ba /dev/jquery.jtable.forms.js
parentc26fddbe3a9d4df9405236d5c339942bd5aa18f9 (diff)
downloadjtable-ccb806db75fc25f02a704171b248cae04fd1a497.zip
jtable-ccb806db75fc25f02a704171b248cae04fd1a497.tar.gz
jtable-ccb806db75fc25f02a704171b248cae04fd1a497.tar.bz2
jTable v2.1.1v2.1.1
Multiple dependsOn support. [#94] Enhanced option caching. [#63] Portuguese - Portugal localization. [#142] Chinese localization. [#103] Fixed some issues. [#90, #28, #130]
Diffstat (limited to 'dev/jquery.jtable.forms.js')
-rw-r--r--dev/jquery.jtable.forms.js122
1 files changed, 59 insertions, 63 deletions
diff --git a/dev/jquery.jtable.forms.js b/dev/jquery.jtable.forms.js
index cfe16f8..7cca500 100644
--- a/dev/jquery.jtable.forms.js
+++ b/dev/jquery.jtable.forms.js
@@ -204,10 +204,6 @@
var $select = $('<select class="' + field.inputClass + '" id="Edit-' + fieldName + '" name="' + fieldName + '"></select>')
.appendTo($containerDiv);
- if (field.dependsOn) {
- $select.attr('data-depends-on', field.dependsOn);
- }
-
//add options
var options = this._getOptionsForField(fieldName, {
record: record,
@@ -230,19 +226,26 @@
}
},
+ /* Creates depended values object from given form.
+ *************************************************************************/
_createDependedValuesUsingForm: function ($form, dependsOn) {
-
if (!dependsOn) {
return {};
}
- var $dependsOn = $form.find('select[name=' + dependsOn + ']');
- if ($dependsOn.length <= 0) {
- return {};
+ var dependedValues = {};
+
+ for (var i = 0; i < dependsOn.length; i++) {
+ var dependedField = dependsOn[i];
+
+ var $dependsOn = $form.find('select[name=' + dependedField + ']');
+ if ($dependsOn.length <= 0) {
+ continue;
+ }
+
+ dependedValues[dependedField] = $dependsOn.val();
}
- var dependedValues = {};
- dependedValues[dependsOn] = $dependsOn.val();
return dependedValues;
},
@@ -336,34 +339,46 @@
_makeCascadeDropDowns: function ($form, record, source) {
var self = this;
- $form.find('select[data-depends-on]')
+ $form.find('select') //for each combobox
.each(function () {
var $thisDropdown = $(this);
+
+ //get field name
var fieldName = $thisDropdown.attr('name');
if (!fieldName) {
return;
}
- var dependsOnField = $thisDropdown.attr('data-depends-on');
- var $dependsOn = $form.find('select[name=' + dependsOnField + ']');
- $dependsOn.change(function () {
-
- //Refresh options
-
- var funcParams = {
- record: record,
- source: source,
- form: $form,
- dependedValues: {}
- };
- funcParams.dependedValues[dependsOnField] = $dependsOn.val();
-
- var options = self._getOptionsForField(fieldName, funcParams);
- self._fillDropDownListWithOptions($thisDropdown, options, undefined);
+ var field = self.options.fields[fieldName];
+
+ //check if this combobox depends on others
+ if (!field.dependsOn) {
+ return;
+ }
- //Thigger change event to refresh multi cascade dropdowns.
-
- $thisDropdown.change();
+ //for each dependency
+ $.each(field.dependsOn, function (index, dependsOnField) {
+ //find the depended combobox
+ var $dependsOnDropdown = $form.find('select[name=' + dependsOnField + ']');
+ //when depended combobox changes
+ $dependsOnDropdown.change(function () {
+
+ //Refresh options
+ var funcParams = {
+ record: record,
+ source: source,
+ form: $form,
+ dependedValues: {}
+ };
+ funcParams.dependedValues = self._createDependedValuesUsingForm($form, field.dependsOn);
+ var options = self._getOptionsForField(fieldName, funcParams);
+
+ //Fill combobox with new options
+ self._fillDropDownListWithOptions($thisDropdown, options, undefined);
+
+ //Thigger change event to refresh multi cascade dropdowns.
+ $thisDropdown.change();
+ });
});
});
},
@@ -388,13 +403,20 @@
//Update field in record according to it's type
if (field.type == 'date') {
- var displayFormat = field.displayFormat || this.options.defaultDateFormat;
- try {
- var date = $.datepicker.parseDate(displayFormat, $inputElement.val());
- record[fieldName] = '/Date(' + date.getTime() + ')/';
- } catch (e) {
- //TODO: Handle incorrect/different date formats
- record[fieldName] = '/Date(' + (new Date()).getTime() + ')/';
+ var dateVal = $inputElement.val();
+ if (dateVal) {
+ var displayFormat = field.displayFormat || this.options.defaultDateFormat;
+ try {
+ var date = $.datepicker.parseDate(displayFormat, dateVal);
+ record[fieldName] = '/Date(' + date.getTime() + ')/';
+ } catch (e) {
+ //TODO: Handle incorrect/different date formats
+ this._logWarn('Date format is incorrect for field ' + fieldName + ': ' + dateVal);
+ record[fieldName] = undefined;
+ }
+ } else {
+ this._logDebug('Date is empty for ' + fieldName);
+ record[fieldName] = undefined; //TODO: undefined, null or empty string?
}
} else if (field.options && field.type == 'radiobutton') {
var $checkedElement = $inputElement.filter(':checked');
@@ -409,32 +431,6 @@
}
},
- /* Download options for a field from server.
- *************************************************************************/
- _downloadOptions: function (fieldName, url) {
- var self = this;
- var options = [];
-
- self._ajax({
- url: url,
- async: false,
- success: function (data) {
- if (data.Result != 'OK') {
- self._showError(data.Message);
- return;
- }
-
- options = data.Options;
- },
- error: function () {
- var errMessage = self._formatString(self.options.messages.cannotLoadOptionsFor, fieldName);
- self._showError(errMessage);
- }
- });
-
- return options;
- },
-
/* Sets enabled/disabled state of a dialog button.
*************************************************************************/
_setEnabledOfDialogButton: function ($button, enabled, buttonText) {