【问题标题】:jQuery plugins and dynamically generated formjQuery 插件和动态生成的表单
【发布时间】:2012-07-12 04:17:05
【问题描述】:

我在我的新项目中使用了两个 jQuery 插件:

$("input[type=text].color").miniColors();
$("input[type=file], input[type=radio], input[type=checkbox], select").uniform();

在这个项目中,我有多个使用 jQuery 动态构建的上传表单 - 我有一个隐藏容器 <div>,其中包含多个表单元素。根据用户的选择,使用html() 函数将所需元素添加到表单中。

用户可以使用标签在多种类型的表单之间切换(Twitter Bootstrap)。

我注意到插件在这些表单元素上无法正常工作。

是否有可能将函数绑定到具有live() 函数的表单或有其他方法吗?

** 编辑 ** 正在使用以下功能构建表单:

function buildForm(target)
{
    var form = $("#" + target);

    switch(target){
        case 'image':
            form.html($("#wrapper-title").html() + $("#wrapper-src").html());
            break;
        case 'generate':
            form.html($("#wrapper-title").html() + $("#wrapper-src").html() + $("#wrapper-generate").html());
            break;
        case 'video':
            form.html($("#wrapper-title").html() + $("#wrapper-url").html());
            break;
        case 'text':
            form.html($("#wrapper-title").html() + $("#wrapper-body").html());
            break;
    }
}

所有元素都放置在表单之外,并在用户更改表单类型时在<form> 标签之间移动。

什么不起作用?例如,在 Uniform 插件中,单选/选择按钮的状态没有改变(图形没有改变)。

干杯!

【问题讨论】:

  • 需要更多信息,一些代码会很好,关于你期望发生的事情没有发生。
  • 除非涉及事件,否则事件委派不起作用。相反,在生成元素时初始化这些插件。
  • @jeffery_the_wind - 更新了问题
  • @Kevin B - 我调用了 buidlForm() 函数两次 - 在页面加载时(如果有错误的表单)以及在每次更改 type 输入之后。你有什么建议来解决我的问题?
  • 初始化 buildForm 方法内部的插件,在 switch/case 语句之后,只针对新添加的表单。

标签: jquery jquery-plugins


【解决方案1】:

在 switch/case 语句之后初始化 buildForm 方法内的插件,仅针对新添加的表单。

function buildForm(target)
{
    var form = $("#" + target);

    switch(target){
        case 'image':
            form.html($("#wrapper-title").html() + $("#wrapper-src").html());
            break;
        case 'generate':
            form.html($("#wrapper-title").html() + $("#wrapper-src").html() + $("#wrapper-generate").html());
            break;
        case 'video':
            form.html($("#wrapper-title").html() + $("#wrapper-url").html());
            break;
        case 'text':
            form.html($("#wrapper-title").html() + $("#wrapper-body").html());
            break;
    }
    $("input[type=text].color", form).miniColors();
    $("input[type=file], input[type=radio], input[type=checkbox], select", form).uniform();
}

【讨论】:

  • 主要问题是我两次调用 buildForm() 函数。插件被初始化两次(例如,统一无线电输入图形被加载两次......)。有什么想法吗?
  • 它们不应该被初始化两次,buildForm 会完全清空表单并将新内容放入其中。该新内容未初始化,但它可能具有先前初始化插件的标记。如果是这种情况,则您构建表单的方法存在缺陷。
  • 我也尝试创建一个空的 div 并将问题仍然存在。顺便提一句。你会推荐什么方法来构建这种形式?
  • 由于您是从一个 html 字符串构建每个表单,因此将该字符串的副本存储在一个变量中,而不是从 DOM 中获取它
猜你喜欢
  • 2010-11-04
  • 2016-01-20
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 2015-08-24
  • 2014-03-15
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多