3 回答
在您的评论中,您说您正在尝试使用 Dropkick 或 jQuery UI MultiSelect Widget。由于这不是多选下拉菜单,因此我认为 Dropkick 将是您想要的。
这是一个jsfiddle,显示代码不适用于 Dropdkick。
我的理解是正常的事件绑定不适用于 Dropkick。相反,您必须使用 dropkick 回调,如下所示:
$('select').dropkick({
change: function(value, label) {
alert('You picked: ' + label + ':' + value);
}
});
似乎“更改”回调是唯一可用的回调。似乎不支持“焦点”回调。
另一个问题是似乎没有办法更改 Dropkick 选择的选项。(我在 jsfiddle 中尝试了您的代码,值变为“0”。)
如果您可以限制使用“更改”回调,那么解决您无法更改选项值这一事实的方法是不要在任何值上包含“_default”。相反,您将在表单中包含一个隐藏字段。当数据库中的值以“_default”结尾时,隐藏字段设置为“true”;否则设置为“假”。dropkick 选择的“更改”回调会将隐藏值设置为“假”。当表单发布时,服务器检查隐藏值是否为“true”,并在发布的选择值末尾附加“_default”。
更新:
如果您要实现隐藏字段,则显示页面的代码如下所示:
<script>
$(function() {
$('select').dropkick({
change: function() {
$('input[name=isDefaultPriceSelected]').val('false');
}
});
});
</script>
<?php
// Helper method that tells if the given string ends with the given substring.
function endsWith($str, $substr) {
$substrLength = strlen($substr);
return substr_compare($str, $substr, -substrLength, substrLength) === 0;
}
// Helper method that prints out a hidden input element.
function printHiddenInput($name, $value) {
echo '<input type="hidden" name="' . $name . '" value="' . $value . '" />
}
?>
<select name="jeans">
<?php
$options = array("Null"=>"", "$0"=>"$0", "$50"=>"$50", "$100"=>"$100", "$150"=>"$150");
echo printSelectOptions($options, $row_default['jeans']);
?>
</select>
<?php
echo printHiddenInput('isDefaultPriceSelected', endsWith($row['jeans'], '_default') ? 'true' : 'false');
?>
您仍然需要处理处理表单发布的代码。它必须同时查找选择值和隐藏值。如果隐藏值为“true”,则应将“_default”附加到已发布选择值的末尾。
注意:您将不再使用replaceKey()
辅助函数。:(
我之前应该注意到这一点,但是调用$('select').focus
不是在文档就绪处理程序中,而是在<select>
添加到 DOM 之前。因此,它不会绑定到<select>
.
尝试:
<script>
$(function() {
$('select').focus(function () {
var option = $(this).find("option[value*=default]");
option.attr('value', option.attr('value').replace(/_default/g, ''));
});
});
</script>
您是否尝试过使用
$(document).on('focus', 'select', function() {
//code here
});