我button_to
在其中添加了一个名为“DELETE”
data: { confirm: "Are you sure you want to delete?" }
我还希望添加一个自定义文本字段,在删除之前询问用户适当的原因,然后将其存储。confirm
除了默认值或disabled
选项之外,我可以在数据中添加文本字段吗?
到目前为止,我已经使用 window.open 完成了它,但这只是一种解决方法。
我button_to
在其中添加了一个名为“DELETE”
data: { confirm: "Are you sure you want to delete?" }
我还希望添加一个自定义文本字段,在删除之前询问用户适当的原因,然后将其存储。confirm
除了默认值或disabled
选项之外,我可以在数据中添加文本字段吗?
到目前为止,我已经使用 window.open 完成了它,但这只是一种解决方法。
您不能向确认框中添加其他字段。因为它只获取单个参数 - message。见这里。
我建议为此任务构建一个自定义确认对话框。
首先,button_to
不一样data: {confirm....}
(尽管考虑一下,您可能正在data: {...}
使用button_to
)
如果您使用的是button_to
,则可以使用以下params
选项向表单添加额外参数:
<%= button_to "Text", your_path, params: {name: "John"} %>
如文档中所述,参数作为隐藏字段传递,因此应该是静态数据(用户不可编辑):
要在表单中呈现为隐藏字段的参数哈希。
既然你想使用data: {confirm ...}
,你必须清楚它是如何工作的:
confirm: 'question?'
- 这将允许不显眼的 JavaScript 驱动程序提示指定的问题(在这种情况下,结果文本将是 question?。如果用户接受,则正常处理链接,否则不采取任何行动。
如前所述,这会加载一个“确认”JS 对话,它基本上只ok/cancel
需要确定用户是否希望继续。
您不能通过标准确认对话框发送额外参数。
--
您可以做的是为 Rails创建一个自定义确认操作。
这涉及覆盖该方法,因此它可以显示您需要的任何内容$.rails.showConfirmationDialog(link);
,而不是调用低级对话。confirm
这是一个要点:
#app/assets/javascripts/application.js
$.rails.allowAction = function(link) {
if (link.data('confirm')) {
$.rails.showConfirmationDialog(link);
return false;
} else {
return true;
}
};
$.rails.confirmed = function(link) {
link.data('confirm', null);
return link.trigger('click');
};
$.rails.showConfirmationDialog = function(link) {
var message, title;
message = link.data('confirm');
title = link.data('title') || 'Warning';
return // ->> your custom action <<-- //
};
我们使用以下内容:
#app/assets/javascripts/application.js
var myCustomConfirmBox;
$.rails.allowAction = function(element) {
var answer, message;
message = element.data("confirm");
answer = false;
if (!message) {
return true;
}
if ($.rails.fire(element, "confirm")) {
myCustomConfirmBox(element, message, function() {
var callback, oldAllowAction;
callback = $.rails.fire(element, "confirm:complete", [answer]);
if (callback) {
oldAllowAction = $.rails.allowAction;
$.rails.allowAction = function() {
return true;
};
element.trigger("click");
$.rails.allowAction = oldAllowAction;
}
});
}
return false;
};
myCustomConfirmBox = function(link, message, callback) {
var flash, icon, wrap;
if (!($("flash#confirm").length > 0)) {
icon = document.createElement("i");
icon.className = "fa fa-question-circle";
flash = document.createElement("flash");
flash.setAttribute("id", "confirm");
flash.appendChild(icon);
flash.className = "animated fadeInDown";
flash.innerHTML += message;
wrap = document.getElementById("wrap");
wrap.insertBefore(flash, wrap.childNodes[0]);
return $(document).on("click", "flash#confirm", function() {
return callback(link);
});
}
};
--
如果你想通过这个传递一个额外的参数,你必须在 JS 中使用它。我以前从未这样做过,但我知道您可以将其附加到您发送到服务器的查询中。
因此,如果您更新代码以显示您的路由和控制器代码,我应该能够想出一个关于如何为您传递参数的想法。