jquery为什么我可以设置一个标签的位置而不是另一个标签的位置?

时间:2013-04-22 11:09:25

标签: jquery css position label

检查这个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;
                     } 
                      );

1 个答案:

答案 0 :(得分: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
  • 尝试缩进代码以使其更具可读性

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