確定這可能有點長,所以請堅持我!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()
函數來遍歷所有條目?
花了大部分時間試圖找出原因後,它「可能」是有事可做與IE政策。我在機器上測試過,不是我們域的一部分,它們都工作,IE8和9 ....它只是我們域上的機器上的IE8/9造成的問題,所以很可能它不會是一個編碼問題,更多的域名問題 – Dopefishmedia