2017-04-27 41 views
1

所以基本上,我試圖解決我的編碼謎題的這一部分。myArray.push(jQuery)不工作

1)代碼#1 - 選擇框>更改顏色。

function myFunction(id){ 
myClass(id); 
selectedChecker(id); 
} 

//FUNCTION TO CHANGE BACKGROUND COLOR ONCE SELECTED 
function myClass(id){ 
var displayCheckedIcon = '<i class="fa fa-check" aria-hidden="true"></i>'; 
var currentClass = jQuery(".currentIcon"+id); 

//TOGGLE THE COLOR CLASS 
jQuery(".slotRow"+id).toggleClass("selectedCell tbselection"); 

//TOGGLE TO WHITE FONT CLASS ONCE SELECTED 
jQuery(".fontCurrent"+id).toggleClass("fontColorSelected fontOriginal"); 

//CONDITION TO DISPLAY THE 'CHECKED' ICON ONCE CLICKED 
if (currentClass.hasClass('uncheckedIcon')) { 
    jQuery(".currentIcon"+id).toggleClass("checkedIcon uncheckedIcon"); 
    jQuery(".currentIcon"+id).html(displayCheckedIcon); 
} 
else if(currentClass.hasClass("checkedIcon")) { 
    jQuery(".currentIcon"+id).toggleClass("uncheckedIcon checkedIcon"); 
    jQuery(".currentIcon"+id).html(""); 
    } 
} 

Before and After Click

2)代碼#2 - 推ID到數組

function selectedChecker(id){ 
var selectedClass = jQuery(".slotRow"+id); 
jQuery(selectedClass).each(function(){ 
    // CHECK IF GOT SELECTED, PUSH ID INTO ARRAY 
    if(jQuery(selectedClass).hasClass("selectedCell")){ 
     var data = []; //ARRAY TO STORE SLOT ID 
     data.push((selectedClass).attr("id")); 
     return jQuery(selectedClass); 
    } 
    }); 
} 

3)代碼#3 - 中的HTML代碼(環路)

<td id="<?php echo $iSlotId;?>" align="center" style="width:30%;" bgcolor="<?php echo $color; ?>" onclick="myFunction(id)" name="arrCheckboxSlot[]" class="f_13 gray3 tbselection slotRow<?php echo $iSlotId;?>" value="<?php echo $iSlotId;?>"> 
    <input name="arrCourtId[]" value="<?php echo $iCourtId;?>" type="hidden"> 
    <a href="javascript:void(0);" class="f_13 gray3 fontOriginal fontCurrent<?php echo $iSlotId;?>" style="text-decoration:none; font-size:12px;"><?php echo $sSlotName;?>&nbsp;<span id="<?php echo $iSlotId;?>" class="currentIcon<?php echo $iSlotId;?> uncheckedIcon"></span></a> 
</td> 

問題是,一旦我點擊框,推送功能不起作用。它不會將任何東西推入我的數組中。

Output that I got from Bugzilla

你們可以請您指出我的錯誤呢?先謝謝了!

+0

1)你在每次迭代中創建一個新的陣列'每()'2)你的'return'語句是多餘的,因爲它從每個'()'處理程序返回,而不是從'selectedChecker()'函數 –

+0

嗨!所以根據你的意見,我應該怎麼做才能在每次迭代中停止創建這些新陣列?我仍然無能爲力。 – JohnDoe

+0

我給你增加了一個答案,雖然對於你想要做什麼有點猜測,因爲你期望的結果並不清楚。 –

回答

0

試試這個

function selectedChecker(id){ 
    var data = []; //ARRAY TO STORE SLOT ID 
    var selectedClass = jQuery(".slotRow"+id); 
    jQuery(selectedClass).each(function(){ 
     // CHECK IF GOT SELECTED, PUSH ID INTO ARRAY 
     if(jQuery(selectedClass).hasClass("selectedCell")){ 

      data.push((selectedClass).attr("id")); 
      return jQuery(selectedClass); 
     } 
     }); 
    } 
+0

唉,它仍然無法正常工作。 :( – JohnDoe

0

這不是完全清楚你要實現什麼,但是你創造的each()每次迭代一個新的數組,而你也從each()函數返回處理程序,而不是父功能。

您可以使用filter()map()簡化邏輯。試試這個:

function selectedChecker(id) { 
    var selectedClass = $(".slotRow" + id); 
    return $(selectedClass).filter('.selectedCell').map(function() { 
    return this.id; 
    }).get(); 
} 
+0

其實我試圖建立一個設施預約功能,會有一個用戶可以選擇的位置列表,所以情景是這樣的: 1)用戶選擇預約位置(正如你可以在圖片1) 2)一旦點擊,據推測selectedChecker函數應該通過每一行並檢查selectedCell類。如果有selectedCell,那麼它會將bookingID存儲到數組中。一旦點擊提交按鈕,它會發送所有的元素到PHP文件 – JohnDoe

+0

那麼這應該爲你建立數組。您只需要將它發送到AJAX請求中 –

+0

對不起,我剛剛注意到我錯過了類選擇器上的'.'。嘗試更新的版本 –