【发布时间】:2011-12-16 08:59:21
【问题描述】:
我正在使用自定义 jQuery 插件将单选按钮转换为实际图像,它适用于基本复选框,但是当使用 Cake 的内置输入表单助手时,它更像是一个复选框,不会取消选中已单击的选项.不仅如此,它还没有填充 $this->data(或在提交表单时发送任何内容)。
js 长这样:
//##############################
// jQuery Custom Radio-buttons and Checkbox; basically it's styling/theming for Checkbox and Radiobutton elements in forms
// By Dharmavirsinh Jhala - dharmavir@gmail.com
// Date of Release: 13th March 10
// Version: 0.8
/*
USAGE:
$(document).ready(function(){
$(":radio").behaveLikeCheckbox();
}
*/
$(document).ready(function() {
$("#bananas").dgStyle();
var elmHeight = "15"; // should be specified based on image size
// Extend JQuery Functionality For Custom Radio Button Functionality
jQuery.fn.extend({
dgStyle: function()
{
// Initialize with initial load time control state
$.each($(this), function(){
var elm = $(this).children().get(0);
elmType = $(elm).attr("type");
$(this).data('type',elmType);
$(this).data('checked',$(elm).attr("checked"));
$(this).dgClear();
});
$(this).mouseup(function() {
$(this).dgHandle();
});
},
dgClear: function()
{
if($(this).data("checked") == true)
{
$(this).addClass("checked");
}
else
{
$(this).removeClass("checked");
}
},
dgHandle: function()
{
var elm = $(this).children().get(0);
if($(this).data("checked") == true)
$(elm).dgUncheck(this);
else
$(elm).dgCheck(this);
if($(this).data('type') == 'radio')
{
$.each($("input[name='"+$(elm).attr("name")+"']"),function()
{
if(elm!=this)
$(this).dgUncheck(-1);
});
}
},
dgCheck: function(div)
{
$(this).attr("checked",true);
$(div).data('checked',true).addClass('checked');
},
dgUncheck: function(div)
{
$(this).attr("checked",false);
if(div != -1)
$(div).data('checked',false).css({
backgroundPosition:"center 0"
});
else
$(this).parent().data("checked",false).removeClass("checked");
}
});
PHP/Html 看起来像这样:
<span id="bananas-cat" class="cat">
<?= $this->Form->radio('bananas',array(),array('legend' => false, 'id' => 'bananas', 'name' => 'category')); ?>
<label for="bananas">Bananas</label>
</span>
虽然它在第一次检查时可能看起来正确,但单击时,$this->data 中没有传递任何内容,它就像一个复选框,并且在我添加一个额外的单选复选框时不会取消选择该值。
虽然收音机功能在没有 CakePHP 的 html 表单帮助器的情况下也能像这样工作:
<span id="animals-cat" class="cat">
<input type="radio" name="category" id="animals" />
<label for="animals">Animals</label>
</span>
如果有人可以在这里帮助我,我将永远感激不尽。我已经尝试解决这个问题太久了,现在我正在考虑从一开始就放弃整个想法。
【问题讨论】:
-
也发布来自
$this->Form->radio调用的HTML 输出。您不需要对所有事情都使用表单助手 - 手动创建单选按钮,使用蛋糕约定data[Model][field]命名字段并使用您的自定义 JS - 完成工作。 -
类似的事情发生在我身上,问题是 cakephp 约定中的名称有 [] 并且需要为
input[name='"+$(elm).attr("name")+"']part 转义,希望这对你有用 -
@Ross 我尝试恢复到正常方法并将
data[Submission][category]放在名称字段中,但是当它发布数据时,它看起来像category => on。不知道那个“开”是从哪里来的。 -
@api55 你到底逃了什么?你能分享一个例子吗?
-
当然,我把 [] 字符转义了,最后你会得到类似
"$(input[@name='data\\[Model\\]\\[radioName\\]']:radio").change是的,一堆斜线,但没有它就不行
标签: javascript jquery forms cakephp checkbox