我使用jquery脚本来选择组合选择的下拉选项。该脚本工作正常,除了提交所选选项后不保存为选择,它默认返回到每个下拉列表的第一个值。
我需要一些帮助。有没有我可以添加到现有帖子或其他替代方案的解决方案。
我使用两个脚本,一个用于dynacially选择双滴(一个drop取决于另一个),另一个脚本列出所有选项及其子选项。
以下是第一个脚本的代码:
(function($) {
$.fn.doubleSelect = function(doubleid, values, options) {
options = $.extend({
preselectFirst: null,
preselectSecond: null,
emptyOption: false,
emptyKey: -1,
emptyValue: 'Choose...'
},
options || {});
var $first = this;
var $secondid = "#" + doubleid;
var $second = $($secondid);
var setValue = function(value) {
$second.val(value).change();
};
/** Helper Function to remove childs from second */
var removeValues = function() {
$($secondid + " option").remove();
};
/** OnChange Handler */
$(this).change(function() {
removeValues();
var $current = this.options[this.selectedIndex].value;
if ($current !== '') {
$.each(values,
function(k, v) {
var bestk;
if ($current == v.key) {
$.each(v.values,
function(k, v2) {
if (!bestk && (v.defaultvalue !== null && v2 == v.defaultvalue)) {
bestk = k;
}
if (options.preselectSecond !== null && v2 == options.preselectSecond) {
bestk = k;
}
});
$.each(v.values,
function(k, v2) {
var o = $("<option>").html(k).attr('value', v2);
if (options.preselectSecond) {
$.each(options.preselectSecond,
function(index, selected) {
if (v2 == selected) {
o.html(k).attr("selected", "selected");
}
}
);
}
if (k === bestk) { o.html(k).attr("selected", "selected"); }
o.appendTo($second);
});
}
});
} else {
setValue(options.emptyValue);
}
});
return this.each(function() {
//remove all current items in select boxes
$first.children().remove();
$second.children().remove();
// Handle the empty option param
if (options.emptyOption) {
var oe = $("<option>").html(options.emptyValue).attr('value', options.emptyKey);
oe.appendTo($first);
}
// add all options to first select box
$.each(values,
function(k, v) {
var of = $("<option>").html(k).attr('value', v.key);
if (options.preselectFirst !== null && v.key == options.preselectFirst) {
of.html(k).attr("selected", "selected");
}
of.appendTo($first);
});
if (options.preselectFirst === null) {
var $current = this.options[this.selectedIndex].value;
if ($current !== '') {
$.each(values,
function(k, v) {
var bestk;
if ($current == v.key) {
$.each(v.values,
function(k, v2) {
if (!bestk && (v.defaultvalue !== null && v2 == v.defaultvalue)) {
bestk = k;
}
if (options.preselectSecond !== null && v2 == options.preselectSecond) {
bestk = k;
}
});
$.each(v.values,
function(k, v2) {
var o = $("<option>").html(k).attr('value', v2);
if (k === bestk) { o.html(k).attr("selected", "selected"); }
o.appendTo($second);
});
}
});
} else {
setValue(options.emptyValue);
}
} else {
$first.change();
}
});
};
})(jQuery);
以下是第二个脚本的示例代码:
$(document).ready(function()
{
var selectoptions = {
"Option 1": {
"key" : "Option 1",
"defaultvalue" : 1,
"values" : {
"sub-option 1": "sub-option 1",
"sub-option 2": "sub-option 2",
"sub-option 3": "sub-option 3"
}
},
"Option 2": {
"key" : "Option 1",
"defaultvalue" : 1,
"values" : {
"sub-option 1": "sub-option 1",
"sub-option 2": "sub-option 2",
"sub-option 3": "sub-option 3"
}
},
"Option 3": {
"key" : "Option 1",
"defaultvalue" : 1,
"values" : {
"sub-option 1": "sub-option 1",
"sub-option 2": "sub-option 2",
"sub-option 3": "sub-option 3"
}
},
};
$('#first').doubleSelect('second', selectoptions);
});
使用的样本表单是:
<form action="" method="post" enctype="multipart/form-data">
<input type="hidden" name="action" value="1" />
<fieldset>
<select type="text" name="address[state]" id="first" value="<?php // echo $_POST["address"]["state"]; ?>" class="short" tabindex="15"><option value="">--</option></select>
<select type="text" name="address[city]" id="second" value="<?php // echo $_POST["address"]["city"]; ?>" class="short" tabindex="16"><option value="">--</option></select>
</fieldset>
<input type="submit" name="submit" id="submit" class="button grey" tabindex="15" value="<?php echo SPEC($GLOBALS['_LANG']['_tpl_myaccount33']) ?>" />
</form>
感谢您对此问题的任何帮助。欣赏它。
答案 0 :(得分:1)
可能是因为您的表单没有action
吗?