3mm./i2I さんからお土産を頂きましたw
本来なら昨日のうちに公開出来れば良かったのですが、対応が遅れて申し訳ありません。
機能の内容は、数量付きのアイテム名をクリックすると、同種のアイテムすべてのチェックBOXをオンにしてくれると言う内容です。 昨日の大殿討伐でもらうさんまの受け取りなどに便利そうですね。
なお、高速化のため「このページ内を一括受け取り」のフォームを流用してるので、そこにも確認アラート入れてる人は2回確認出て邪魔かもしれませんとのことです。
①クリックする場所は、名前の部分です。
②同種のプレゼントアイテム全てのチェックBOXにチェックが入ります。
以下、コードの変更内容です。
// プレゼント
function presentCheck() {
if (!location.pathname.match(/\/user\/present/)) {
return;
}
// すべてのプレゼントを受け取りにconfirmを追加
$('div.ig_decksection_mid div:contains("ボックス内のアイテムは刷新後に引き継ぐことはできません")').css({
'left': '415px',
'width': '340px'
});
$('#ig_allbtn').on('click', function() {
if (!confirm('すべてのプレゼントを受け取ってよろしいですか?')) {
return false;
}
});
- $('#pid').click(function () {
+ $(document).on('click', 'input[name="pid"]', function(){
if (!confirm('すべてのプレゼントを受け取ってよろしいですか?')) {
return false;
}
});
+
+ // 数量付きのアイテム名クリックで、同種のアイテムすべての選択をOnにする
+ $(document).on('click', '.item p.title>strong>span', function(){
+ let item_title = $(this).html().match(/(.+?)(?: | )+(\d+)/);
+ if(item_title){
+ $('.item input:checkbox').prop('checked', false);
+ $('.item:contains("' + item_title[1] + '") input:checkbox').prop('checked', true);
+ }
+ });
// プレゼントの選択受け取り↓変更点(プレゼントボックス)
var get_target = function(html) {
return $(html).find('input[name="id"]');
},
create_checkbox = function(html) {
var $input = get_target($(html));
$input.each(function() {
// 変更点(プレゼントボックス修正01)
var $label = $('<label><br>選択</label>').css({
'margin': '0 4px',
'line-height': '1.7em',
'color': 'black',
'font-size': '11px',
}),
$checkbox = $('<input />').attr({
type: 'checkbox',
name: 'select_' + $(this).val()
}),
target = $(this).parent().css('float', 'left');
target.after($label.prepend($checkbox));
});
},
get_selected = function() {
var array = [],
id, name;
$('input[name^="select_"]').each(function() {
id = $(this).attr('name').match(/\d+/g)[0];
// 変更点(プレゼントボックス修正02)
name = $(this).parents('div.item_wrap_out3').find('p.title').text();
if ($(this).prop('checked')) {
array.push({
id: id,
name: name
});
}
});
return array;
},
transmission = function(array) {
var object = array.shift();
$.ajax({
type: 'post',
url: '/user/present.php',
data: {
id: object.id
},
beforeSend: xrwStatusText,
})
.then(function(html) {
Info.log('【 ' + object.name + '】を受け取りました');
if (array.length) {
return setTimeout(transmission, 500, array);
} else {
return Info.title('完了', location.href);
}
}, null);
},
start_receive = function() {
- var array = get_selected();
+ let checked = $('.item input:checkbox:checked');
- if (!array.length) {
+ if (!checked.length) {
moko_alert('選択項目が存在しません');
return false;
}
+ let list = {}, list_text;
+ $('.item input:checkbox:checked').map(function(){
+ let item = $(this).closest('.item').find('p.title>strong>span').html()
+ .replace(/(?: )+/g, ' ')
+ .match(/^([^ ]+)(?: +(\d+))?/);
+ list[item[1]] = (list[item[1]]??0) + parseInt(item[2] ? item[2] : 1);
+ });
+ list_text = Object.keys(list).map(k => `・${k} ${list[k]}`).join('\n');
- if (!confirm('選択項目をすべて受け取ってよろしいですか?')) {
+ if (!confirm('選択項目をすべて受け取ってよろしいですか?\n' + list_text)) {
return false;
}
- nowLoading();
- Info.title('プレゼントを受け取り中...');
- return transmission (array);
+ let ids = $('.item input:checkbox:checked').map(function(){
+ return $(this).attr('name').replace(/[^\d]/g, '');
+ }).get().join(',');
+ let before_ids = $('#ids').val();
+
+ // ページ内一括受け取りの値を書き換えて実行、受け取れない可能性もあるので1秒後に戻す
+ $('#ids').val(ids).closest('form').find('#inpage').click();
+ setTimeout(_=>$('#ids').val(before_ids), 1000);
};
var $html = $('div.ig_decksection_mid'),
<以下省略>
なお、参考までに原文はこちらです。
以上



