2013-02-12 157 views
2

不知道它是否實際上迭代一次,但只生成一個對話框。 jQuery的循環針對的是每個PHP循環迭代的隱藏輸入,從1開始計數;總共有兩個'roomID'。Jquery:循環迭代

使用警報給了我兩個,但它沒有分配與jquery對話,作爲回報給我的第一個。這是爲什麼發生?

是否有這樣做的更好的方法:

$('input#roomID').each(function() { 
    var roomID = $('input#roomID').val(); 
    alert($(this).val()); 

      $('div.edit-dialog-'+roomID).dialog({ 
       autoOpen: false, 
       height: 500, 
       width: 550, 
       modal: true, 
       position:['middle','middle'], 
       draggable: true, 
       //resizable: true, 
       buttons: { 
        Cancel: function() { 
         $(this).dialog("close"); 
        } 
       }, 
        close: function() { 
         allFields.val("").removeClass("ui-state-error"); 
        } 
      }); 

      $('a.room-edit-'+roomID).click(function() { 
       $('div.edit-dialog-'+roomID).dialog("open"); 
      }); 
    }); 

我有點新的jQuery的。

+0

對於此輸入#roomID選擇,您不能有多個dom元素。 – Elbek 2013-02-12 02:05:02

回答

5

你正在選擇一個ID'#'。

Dom's需要唯一的id。

試着讓它變成一個類。

所以不是

<input id="roomID" type="text" /> 

添加類

<input class="roomID" type="text" /> 

然後

$('input.roomID').each(); 

將與類roomID

選擇頁面上所有的輸入編輯

jQuery的每個函數都會經過選擇器匹配。所以說,你有這樣的HTML:當你調用每個這樣的

<input class="hello" /> 
<input class="hello" /> 
<span class="hello">text</span> 

然後:

$('.hello').each(function(i, ele){}); 

jQuery將調用該函數每次的功能都會有this(或將作用域)3次個人的dom元素。它按照它們在dom中出現的順序執行此操作。所以第一次通過它將是input然後input然後span

每次this都會指向各自的dom元素而不是jQuery映射的元素。這就是爲什麼你需要做$(this)來訪問jquery的輔助方法,而不僅僅是this.val()

它也調用帶有2個參數的函數,第一個是迭代數,所以在span的情況下,這將是2.第二個是元素。

+0

試過,dennmat。同樣的結果。 – Joe 2013-02-12 02:06:31

+0

你還需要更新你的行'var roomID = $('input#roomID').val();''到'$(this).val()'。 – dennmat 2013-02-12 02:07:38

+0

OOO!那樣做了!這也非常有意義。由於我是jquery的新手,但理解PHP的循環...我的假設是通過使用特定的'input#roomID',它抓住了第一個,而不是每個迭代都會改變的$(this)? <3 – Joe 2013-02-12 02:12:24

0

如果您使用another selecto r來定製輸入,這會好得多。

<input name="new3" /> 
<input name="new2" /> 
<input name="new1" /> 

<script> 
    $('input[name*="new"]').val('xxxxx'); 
</script>