1

检查这个 JS 小提琴。http://jsfiddle.net/jclamp/Nf7Fc/3/

Name 的标签是通过 jquery 创建的,然后可以使用它的父字段的位置来设置它的位置。

电子邮件标签是通过表单验证创建的。同一个 jquery 应该能够设置它的位置,但它不能。为什么?

作品:

$('#name').after('<label class="error" for="name">I can create this label via jquery and then move it\'s position.</label><br>');

$('label.error').css('left', 
                     function() {
                    return $('input[name='+$(this).attr('for')+']' ).offset().left;
                     } 
                      );

不起作用:

$("#registerForm").validate();

$('label.error').css('left', 
                     function() {
                    return $('input[name='+$(this).attr('for')+']' ).offset().left;
                     } 
                      );
4

1 回答 1

1

尝试.prop()代替.attr()

    $('label.error').css('left', function() {
        // find input element assigned to the label
        var inputName = $(this).prop('for'); // <--- here
        var inputElement = $('input[name=' + inputName + ']' );

        // you can use logging to see which element jQuery actually found:
        console.log(inputElement);

        return inputElement.offset().left;
    });

这是一个工作示例:http: //jsfiddle.net/JjYPR/3/

希望这可以帮助。

不过,我对您的代码有一些注释。您的 jsfiddle 中的代码根本不起作用。元素名称存在一些错误,当您按下提交按钮时,没有验证任何内容,但发生了另一个错误。下次您发布问题时,您可能会记住以下提示:

  • 使用 Firebug 或其他一些调试工具检查错误
  • 如果您的代码可以使用的设置,请创建一个也可以使用的 jsfiddle
  • 尝试缩进您的代码以使其更具可读性

然后人们更容易帮助你。;)

于 2013-04-23T06:23:17.990 回答