2012-06-21 106 views
0

確定這可能有點長,所以請堅持我!jQuery UI可選擇未​​選擇

我有一個HTML格式的時間表網格顯示週期/天,每個單元格都設置了一個「可選」類。

然後,我使用jQuery UI Selectable讓我只選擇可選擇的單元格(以停止選擇表格標題)。當您完成選擇時,javascript會將隱藏字段添加到表單中,以備POST使用。

這裏就是錯誤的用武之地。

如果拖過多個單元格,然後點擊書,它正確地傳遞他們(選擇3個小區,並通過隱藏的輸入傳遞)。如果您拖動多個單元格,但然後單個選擇一個不同的單元格,然後單擊BOOK,它似乎會選取以前的多個選擇。

現在仍然陌生,它不會在Firefox或我的IE9副本中執行此操作,但在其他IE9副本中它確實會導致此錯誤。我需要它在IE8/9/10上工作,因爲我們不能真正使用FF或其他任何東西的教育環境。

這裏是JavaScript的位我....

誠然,他們可能會顯得凌亂,我從來沒有真正使用的JavaScript,但所選擇的功能的工作原理我多麼希望。這是未經選擇的功能,似乎會導致問題。

$("#selectable").selectable({ 
    filter: ".selectable", 
    selected: function() { 
     var count = 0; 
     $(".ui-selected", this).each(function() { 
      var data = $(this).data(); 
      $(data).each(function(key, value){ 
       var room_id = document.createElement("input"); 
       room_id.setAttribute("type", "hidden"); 
       room_id.setAttribute("name", "booking["+count+"][room]"); 
       room_id.setAttribute("value", data.room); 
       room_id.setAttribute("class", "js-added"); 
       document.getElementById("add").appendChild(room_id); 
       var date_id = document.createElement("input"); 
       date_id.setAttribute("type", "hidden"); 
       date_id.setAttribute("name", "booking["+count+"][date]"); 
       date_id.setAttribute("value", data.date); 
       date_id.setAttribute("class", "js-added"); 
       document.getElementById("add").appendChild(date_id); 
       var period_id = document.createElement("input"); 
       period_id.setAttribute("type", "hidden"); 
       period_id.setAttribute("name", "booking["+count+"][period]"); 
       period_id.setAttribute("value", data.period); 
       period_id.setAttribute("class", "js-added"); 
       document.getElementById("add").appendChild(period_id); 
       var day_id = document.createElement("input"); 
       day_id.setAttribute("type", "hidden"); 
       day_id.setAttribute("name", "booking["+count+"][day]"); 
       day_id.setAttribute("value", data.day); 
       day_id.setAttribute("class", "js-added"); 
       document.getElementById("add").appendChild(day_id); 
       var bookable_id = document.createElement("input"); 
       bookable_id.setAttribute("type", "hidden"); 
       bookable_id.setAttribute("name", "booking["+count+"][bookable]"); 
       bookable_id.setAttribute("value", data.bookable); 
       bookable_id.setAttribute("class", "js-added"); 
       document.getElementById("add").appendChild(bookable_id); 
       var bookable_id_delete = document.createElement("input"); 
       bookable_id_delete.setAttribute("type", "hidden"); 
       bookable_id_delete.setAttribute("name", "booking["+count+"][bookable]"); 
       bookable_id_delete.setAttribute("value", data.bookable); 
       bookable_id_delete.setAttribute("class", "js-added"); 
       document.getElementById("delete").appendChild(bookable_id_delete); 
       var booking_id_delete = document.createElement("input"); 
       booking_id_delete.setAttribute("type", "hidden"); 
       booking_id_delete.setAttribute("name", "booking["+count+"][booking_id]"); 
       booking_id_delete.setAttribute("value", data.bookingid); 
       booking_id_delete.setAttribute("class", "js-added"); 
       document.getElementById("delete").appendChild(booking_id_delete); 
       var bookable_id_edit = document.createElement("input"); 
       bookable_id_edit.setAttribute("type", "hidden"); 
       bookable_id_edit.setAttribute("name", "booking["+count+"][bookable]"); 
       bookable_id_edit.setAttribute("value", data.bookable); 
       bookable_id_edit.setAttribute("class", "js-added"); 
       document.getElementById("edit").appendChild(bookable_id_edit); 
       var booking_id_edit = document.createElement("input"); 
       booking_id_edit.setAttribute("type", "hidden"); 
       booking_id_edit.setAttribute("name", "booking["+count+"][booking_id]"); 
       booking_id_edit.setAttribute("value", data.bookingid); 
       booking_id_edit.setAttribute("class", "js-added"); 
       document.getElementById("edit").appendChild(booking_id_edit); 
       count = count + 1; 
      }); 
     }); 
    }, 
    unselected: (function(){ 
     $('div').removeClass('ui-selected'); 
     $(".js-added").remove(); 
    }) 
}); 

如果需要頁面中的任何其他代碼,請讓我知道。

只是爲了重新審視它,如果拖過Mon-P1/Mon-P2/Mon-P3/Mon-P4並單擊BOOK,它會顯示它們是正確的。如果我拖過相同的4,但隨後單選Tue-P1(應取消選擇所有其他選項),它會給我:

Tue-P1/Mon-P2/Mon-P3/Mon- P4

就好像它只是取消了第一個元素,而不是其他的。它是否需要類似$(".ui-selected").each()函數來遍歷所有條目?

+0

花了大部分時間試圖找出原因後,它「可能」是有事可做與IE政策。我在機器上測試過,不是我們域的一部分,它們都工作,IE8和9 ....它只是我們域上的機器上的IE8/9造成的問題,所以很可能它不會是一個編碼問題,更多的域名問題 – Dopefishmedia

回答

0

對此的回答奇怪的是IE8/9在Intranet網站上強制執行兼容性視圖。有了這個關閉多選功能正常。 我最終不得不添加一個內容「IE = 9」的元首,以使其工作,邊緣和IE = 8沒有做任何事情。
不知道這是否會影響其他jquery的東西,但兼容性視圖是一個很好的選擇,看看如果你有問題