2013-04-22 20 views
1

檢查此JS小提琴。 http://jsfiddle.net/jclamp/Nf7Fc/3/jquery爲什麼我可以設置一個標籤的位置而不是另一個?

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; 
        } 
        ); 
+0

爲什麼你不想使用CSS?使用jQuery的.css()方法就像使用樣式表一樣。 – Friederike 2013-04-22 11:14:18

+0

http://api.jquery.com/css/ – dreamweiver 2013-04-22 11:16:31

+0

嘗試在表單元素上使用DOMSubtreeModified事件來更新動態創建的標籤 – 2013-04-22 11:16:27

回答

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中的代碼根本不起作用。元素的名稱存在一些錯誤,當您按下提交按鈕時,沒有任何內容被驗證,但發生了另一個錯誤。你張貼問題,你可能會保持以下提示記住下一次:使用螢火蟲或其他一些調試工具

  • 如果您有您的代碼工作的設置,創建工作也
  • 一個的jsfiddle

    • 檢查錯誤
    • 嘗試縮進您的代碼,使其更具可讀性

    然後,人們更容易幫助您。 ;)

    +0

    真棒。謝謝!代碼正在工作,但之後我在這裏發佈後我一直在擺弄它。對我感到羞恥。儘管如此,再次感謝您的幫助。 – JaseC 2013-04-23 10:10:43

    +0

    不客氣。 ;) – Friederike 2013-04-23 10:33:07

    +0

    的人誰不想下的相應字段元素,以簡單的絕對位置JQuery驗證錯誤的標籤,這是簡單的代碼,我最終使用:'errorPlacement:功能(錯誤,元素){ \t \t \t \t \t element.after (error.css('left',element.offset()。left)。css('top',element.offset()。top + 45)); \t \t \t \t},''使用'invalidHandler'或'showErrors'不起作用,因爲css調整僅在第二次點擊提交按鈕時出現。 – JaseC 2013-05-27 03:56:50

    相關問題