我正在使用Django和django-dynamic-formset插件来生成JQuery Mobile(JQM)站点。我有嵌套的表单,允许用户单击到表单的另一行的“添加”链接。这在没有JQM的情况下工作得很好,但是当使用JQM来设置窗体小部件的样式时,单选按钮标签不会触发正确的单选按钮。
我有put up a static example of the behaviour,基于生成的HTML。单击“添加”链接,然后尝试为添加的项目选择严重性。标签的“for”属性似乎正确更新,所以我不知道我做错了什么。
django-dynamic-formset guide为我提供了一种在用户点击“添加”按钮后调用JavaScript函数的方法,但我不知道是否有一个我应该调用的JQM方法来解决问题。当我使用JQM的enhanceWithin函数时,它触发了一个页面加载,它将我的表单提交给Django,我当时不想要这个,因为表单还没有验证。
修改:我向同一网址上传了一个更好的示例。
答案 0 :(得分:1)
经过充足的咖啡因和花生M& M's我已经弄明白了。
失败原因: django-dynamic-formset(DDF)插件会复制您提供的表单。但是表单按原样克隆,已包含所有JQuery Mobile(JQM)处理。这会导致JQM忽略它并使单选按钮行为不正常。
解决方案: DDF插件允许您通过其formTemplate
参数指定要克隆的表单。 JQM允许您禁用某些元素的自动移动增强功能。创建表单的非增强版本,并将其作为formTemplate
传递给DDF。
更多详情: 我将此编码放入我的HTML头,之前对JQM的引用:
<script>
$(document).bind('mobileinit',function(){
$.mobile.ignoreContentEnabled = true; // required for using the natural forms
});
</script>
包括这种风格隐藏我的“自然”形式:
<style>
.natural-form { visibility: hidden; display: none; }
</style>
在Django代码中,我添加了一个<div class='natural-form>
并在其中放置了我的表单的虚拟版本(确保用另一个<div>
包围另一个formTemplate
以供稍后参考)。在我初始化DDF时,我给它提供了唯一的ID作为{{1}}的参数。
我被告知在另一个论坛上,我将不得不破解DDF和JQM以使其工作。我对这两个库的设计印象深刻 - 足够灵活,JQuery的新手可以将所有部分放在正确的位置并从中获取一些东西。