4

当我第一次单击它时,jQuery 错误框不会出现。当我再次点击第二次时。

$(document).ready(function() {  

jQuery.validator.addMethod("file", function( value, element ) {
                var ext = value.substring(value.lastIndexOf('.') + 1);
                var result = this.optional(element) || ext == "csv" || ext == "CSV";
                return result;
        }, '<div class="errorbox rateError"><div class="error-message">* Please upload only csv file</div><div class="error-arrow"></div></div>');
var $Zone = $('#ZoneZone').attr('name');

var $params = {debug:false,rules:{},messages:{}};

$params['rules'][$Zone] = {"required": true};
$params['messages'][$Zone] = {"required":'<div class="errorbox rateError"><div class="error-message">* Please enter Zone</div><div class="error-arrow"></div></div>'
};

 $("#ZoneAdminAddForm").validate($params);

jQuery(document).on('click','.errorbox',function(){
        alert("click");
        $(this).fadeOut('slow',function(){
            $(this).remove();
        });                                  
    });

});

当我第一次单击错误框时没有任何反应,但是当我再次单击第二次时,它发出警报单击并且该错误消息正在消失。

我也尝试不提供冲突代码,但它不起作用。

相同的代码在其他页面中工作。

4

2 回答 2

2

.on() 适用于 jQuery 1.7 及更高版本。如果您有旧版本,请使用以下命令:

$('.errorbox').live('click',function(){
        $(this).fadeOut('slow',function(){
                $(this).remove();
        });                                  
    });


   $('.errorbox').live('focus', function()
    {
        $(this).fadeOut('slow',function(){
        $(this).remove();        
        });
    });
于 2013-06-19T10:05:24.030 回答
1

使用on代替live并将代码包装在document.ready. 我怀疑此代码首次尝试绑定事件处理程序时未加载 dom 元素。该live方法已被弃用一段时间,并且该on方法是首选方法,它使用事件传播将事件处理程序分配给当前未在 DOM 上呈现的元素。

$(document).ready(function(){
    jQuery(document).on('click','.errorbox',function(){
        alert("click");
        $(this).fadeOut('slow',function(){
            $(this).remove();
        });                                  
    });
});
于 2013-06-19T09:32:08.850 回答