0

我正在使用 Django 和 django-dynamic-formset 插件来生成 JQuery Mobile (JQM) 站点。我有嵌套表单,允许用户单击“添加”链接到表单的另一行。这在没有 JQM 的情况下工作得很好,但是当 JQM 用于设置表单小部件的样式时,单选按钮标签不会触发正确的单选按钮。

我基于生成的 HTML提出了一个静态的行为示例。单击“添加”链接,然后尝试为添加的项目选择严重性。标签的“for”属性似乎正确更新,所以我不知道我做错了什么。

django-dynamic-formset 指南为我提供了一种在用户单击“添加”按钮后调用 JavaScript 函数的方法,但我不知道是否应该调用 JQM 方法来解决问题。当我使用 JQM 的 enhanceWithin 函数时,它会触发页面加载,它将我的表单提交给 Django,此时我不希望这样做,因为表单还没有验证。

编辑:我将一个更好的示例上传到相同的 URL。

4

1 回答 1

1

在足够的咖啡因和花生 M&M 之后,我想通了。

失败原因: django-dynamic-formset (DDF) 插件复制了你给它的表单。但是表单是按原样克隆的,其中已经包含所有 JQuery Mobile (JQM) 处理。这会导致 JQM 忽略它并使单选按钮行为异常。

解决方案:formTemplate DDF 插件允许您通过其参数指定要克隆的表单。JQM 允许您禁用某些元素的自动移动增强功能。创建表单的未增强版本,并将其作为您的formTemplate.

更多细节:我把这个编码到我的 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>用唯一的 ID 将其包围以供稍后参考)。在我的 DDF 初始化中,我给它唯一的 ID 作为formTemplate.

在另一个论坛上有人告诉我,我必须破解 DDF 和 JQM 才能使其正常工作。这两个库的设计给我留下了深刻的印象 - 足够灵活,以至于 JQuery 的新手可以将所有部分粘贴在正确的位置并从中获得一些东西。

于 2012-06-13T05:36:06.450 回答