首页 / 帖子
jq插件如何针对ajax表单动态绑定

用jq插件(icheck和 zebra_datepicker等)对ajax表单绑定了一些效果,(比如:我对多个input[type=text]加了日历效果,正常效果是点input出现日历,再点空白地方日历消失)


但是当表单出错或者提交后,jq插件的效果就消失了,用on() live()的话也不能完美解决。


我尝试用Drupal.behaviors来解决

(function ($) {
    Drupal.behaviors.ajax = {//这个地方.ajax可以随便取吗?
        attach: function (context) {//这里我看有两个参数都有什么用呢?
        $('#datepicker-start').Zebra_DatePicker({
                view: 'months',
                direction: true,
                pair: $('#datepicker-end')
        });
        ......
        ......
        }
    };
})(jQuery);

这样改后表单返回后jq效果还在,但是日历插件会出现:除最后一个绑定的input外,其他前面input的点击出现日历后再点空白处日历不会消失了, 这样影响了用户体验。

我看就以前有回答说本站没用Drupal.behaviors但大量使用了ajax,请问是怎么做到的呢?

3个答案
陈蹊
发布于:2014-06-13 16:08

换个思路,表单内容提交之前就进行验证呢?

jq有表单验证相关的插件,在提交之前先验证内容。

这样会不会减少问题出现的几率呢?

YOYO
发布于:2014-06-13 18:35
  1. ajax最好改成模块名字。

  2. context参数就是作用域。里面的方法一般都写成 $('#aa', context)的格式。

  3. 最后一个问题,可能是你绑定的问题了,日历不会消失,你看看你用的这个插件参数有没有传递正确。一般情况,这么绑定就可以了。

  4. 本站的JS效果,做了一些特殊的处理,所以不用这种绑定。具体可以到 http://www.drupal001.com 看相关文章。

老葛
发布于:2014-06-15 08:41

感觉就是写好的绑定代码没有生效,找到合适的位置,手动调用Drupal.attachBehaviors试试。