如何使用Javascript打开模态?
我是一名学习编码的学生,刚刚开始学习javascript/jquery。我已经创建了一个RoR国际象棋游戏,目前正在进行移动。基本上,一旦一个棋子到达棋盘的另一端,一个模式应该打开,让玩家选择棋子来替换棋子。在前端,我有一个模式,当一个棋子满足必要条件时,它会自动触发。我创建了一个应该这样做的函数is_pawn_promotion,但是模态仍然不能自己打开,现在我不确定下一步该怎么做。我想知道is_pawn_提升函数是否没有被正确调用,显然不是。我试图重新组织OpenModel函数的位置,但没有成功。任何帮助都将不胜感激,希望我已经提供了一个关于正在发生的事情的足够清晰的图片 这是包含is_pawn_升级的JS文件。我已经包括了整个文件,其中包含我试图调用的OpenModel函数,以便打开模式如何使用Javascript打开模态?,javascript,jquery,css,jquery-ui,Javascript,Jquery,Css,Jquery Ui,我是一名学习编码的学生,刚刚开始学习javascript/jquery。我已经创建了一个RoR国际象棋游戏,目前正在进行移动。基本上,一旦一个棋子到达棋盘的另一端,一个模式应该打开,让玩家选择棋子来替换棋子。在前端,我有一个模式,当一个棋子满足必要条件时,它会自动触发。我创建了一个应该这样做的函数is_pawn_promotion,但是模态仍然不能自己打开,现在我不确定下一步该怎么做。我想知道is_pawn_提升函数是否没有被正确调用,显然不是。我试图重新组织OpenModel函数的位置,但没有
$( function() {
$( ".piece" ).draggable({
snap: ".piece-square",
grid: [60, 60],
containment: ".game-board",
});
$( ".piece-square" ).droppable({
accept: ".piece",
drop: function( event, ui ) {
var x = $(event.target).data('x');
var y = $(event.target).data('y');
var urlUpdatePath = $('.ui-draggable-dragging').data('url');
var is_pawn_promotion = function() {
return $(".piece") === 'Pawn' &&
(y === 0 || y === 7);
};
var sendAJAXRequest = function(x, y, type) {
$.ajax({
type: 'PUT',
url: urlUpdatePath,
data: { piece: { x_position: x, y_position: y, piece_type: type} },
success: function(response) {
if(response == 'OK') {
console.log(response);
} else {
alert(response);
}
}
});
};
if (is_pawn_promotion()) {
openModal();
var promoSubmitButton = $(".promo-selection-submit");
promoSubmitButton.on('click', function() {
var type = $('.promo-selection.input[selected]').val();
sendAJAXRequest(x, y, type);
});
} else {
sendAJAXRequest(x, y);
}
}
});
});
var openModal = function() {
// Change modal-state checkbox to checked
$("#promo-modal").prop("checked", true);
if ($("#promo-modal").is(":checked")) {
$("body").addClass("modal-open");
} else {
$("body").removeClass("modal-open");
}
$(".modal-fade-screen, .modal-close").on("click", function() {
$(".modal-state:checked").prop("checked", false).change();
});
$(".modal-inner").on("click", function(e) {
e.stopPropagation();
});
};
模态
<div class="modal">
<input class="modal-state" id="promo-modal" type="checkbox" />
<div class="modal-fade-screen">
<div class="modal-inner">
<div class="modal-close" for="promo-modal"></div>
<div class="promo-modal-text">
<h1>Pawn Promotion!</h1>
<h1>Make your selection: </h1>
</div>
<form action="#" class="pawn-promotion">
<div class="promo-selection-container">
<% [Queen, Knight, Bishop, Rook].each do |piece_type| %>
<div class="promo-selection">
<label>
<%= image_tag(piece_type.new(color: current_color).piece_image) %>
<%= piece_type.name %>
<input type="radio" name="promo-piece" value="<%= piece_type.name %>">
</label>
</div>
<% end %>
</div>
<br/>
<div class="promo-selection-submit">
<input type="submit">
</div>
</form>
</div>
</div>
</div>
在声明函数之前,您正在调用该函数。尝试更改它的位置。我自己设法找到了解决方案。主要问题是我如何定义is_pawn_提升函数。我将其更改为以下内容:
var is_pawn_promotion = function() {
return ui.draggable.data('pieceType') === 'Pawn' &&
(y === 0 || y === 7);
};
我还必须将数据块类型属性添加到视图中的实际块中,如下所示:
<div class="piece" data-url="<%= game_piece_path(piece.game, piece)%>" data-piece-type="<%= piece.piece_type %>">
<%= image_tag(piece.piece_image) %>
</div>
现在,当棋子处于要提升的位置时,模式将打开。感谢您的回复,但我对此有点困惑。您是指OpenModel函数吗?你能解释一下吗?没错。OpenModel函数。我不是很确定,但这是有道理的。我想你应该试一试。嗯,这似乎不起作用,但当然可能是因为还有另一个原因,它没有开放,而且它的位置仍然需要改变。