Javascript 在jquery对话框中单击按钮时出错

Javascript 在jquery对话框中单击按钮时出错,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我可以在单击“拒绝请求”时显示对话框,但对话框不会关闭,并且在单击“取消”或“确定”时在控制台中看到错误。“未捕获的TypeError:无法读取未定义的属性'apply'” HTML: 拒绝请求 拒绝请求? JQuery: <script type="text/javascript"> $(document).ready(function () { $("#reject-dialog").dialog({ autoOpen: false

我可以在单击“拒绝请求”时显示对话框,但对话框不会关闭,并且在单击“取消”或“确定”时在控制台中看到错误。“未捕获的TypeError:无法读取未定义的属性'apply'”

HTML:

拒绝请求
拒绝请求?
JQuery:

<script type="text/javascript">
    $(document).ready(function () {
       $("#reject-dialog").dialog({
            autoOpen: false,
            modal: true,                    
            buttons: {
                "Confirm": {
                    text: "OK",
                    id: "confirm-reject"
                },
                "Cancel": {
                    text: "Cancel",
                    id: "cancel-reject"
                }
            }
       });
       $("#btn-reject").click(function (e) {
           e.preventDefault();

           $("#reject-dialog").dialog('open');
       });
       $('#cancel-reject').click(function () {
           $("#reject-dialog").dialog('close');
           console.log('confirm');
       });
       $('#confirm-reject').click(function () {
           $("#reject-dialog").dialog('close');
           console.log('reject');
       });
});  //dom

</script>

$(文档).ready(函数(){
$(“#拒绝对话框”)。对话框({
自动打开:错误,
莫代尔:是的,
按钮:{
“确认”:{
文字:“OK”,
id:“确认拒绝”
},
“取消”:{
文本:“取消”,
id:“取消拒绝”
}
}
});
$(“#btn拒绝”)。单击(功能(e){
e、 预防默认值();
$(“#拒绝对话框”).dialog('open');
});
$(“#取消拒绝”)。单击(函数(){
$(“#拒绝对话框”).dialog('close');
console.log('confirm');
});
$(“#确认拒绝”)。单击(函数(){
$(“#拒绝对话框”).dialog('close');
console.log(“拒绝”);
});
});  //多姆
JQuery版本:

您正在绑定到
文档中尚不存在的按钮。准备就绪

相反,您可以在创建按钮时告诉对话框要触发什么回调

更新: 根据Jquery ui文档,接受以下两种格式中的一种:

1) 对象:键是按钮标签,值是单击关联按钮时的回调

2) 数组:数组的每个元素都必须是一个对象,定义要在按钮上设置的属性、属性和事件处理程序

我更新了代码以反映这一点

代码


$(文档).ready(函数(){
var dialogDiv=$(“#拒绝对话框”);
dialogDiv.dialog({
自动打开:错误,
莫代尔:是的,
按钮:[
{
文字:“OK”,
id:“确认拒绝”,
单击:函数(){
dialogDiv.dialog(“关闭”);
console.log('confirm');
}
},
{
文本:“取消”,
id:“取消拒绝”,
单击:函数(){
dialogDiv.dialog(“关闭”);
console.log(“拒绝”);
}
}
]
});
$(“#btn拒绝”)。单击(功能(e){
e、 预防默认值();
dialogDiv.dialog(“打开”);
});
});  //多姆
您需要使用,因为执行代码时按钮不存在

例如,更改:

$('#cancel-reject').click(function () {
    $("#reject-dialog").dialog('close');
    console.log('confirm');
});
致:


理想情况下,您希望绑定到页面上已存在的元素,该元素比
文档
更接近,以获得更好的性能。

您需要通知单击函数,甚至需要在创建对话框后绑定单击处理程序。我认为这是因为Jquery试图通过apply native js函数执行属性click,如果您没有定义它,js会尝试在未定义的函数中执行apply

因此,我建议您定义一个空函数(或jQuery.noop):


需要更多的代码,因为在您的代码中没有apply被调用,所以必须有更多的代码,但它看起来像任何其他脚本调用jquery的apply函数,在任何地方,jquery都没有定义。我认为在兼容模式下使用jquery是很重要的,并且它没有设置。这消除了错误,现在我看到了控制台日志消息(拒绝或确认),但对话框没有关闭。嗯。现在它正在跳过preventDefault并提交表单。没有打开任何对话框。哦,这是有意义的。preventDefault现在正在触发,我看到了与我单击的对话框按钮关联的控制台日志消息…但那该死的对话框没有关闭!另外,你能解释分配的方法吗var的对话框id?您可以忽略var分配,这只是旧习惯。它允许您更改对话框id,而无需更改太多代码。我没有收到任何错误,而且除了css中的样式之外,我没有任何其他内容。这可能是jquery的版本吗?我将更新我的问题以显示如何调用jquery。我得到控制台日志消息现在是,但是对话框没有关闭,我仍然在控制台消息确认或拒绝之前看到错误“UncaughtTypeError:cannotreadproperty'apply'of undefined”。
<script type="text/javascript">
$(document).ready(function () {
   var dialogDiv = $("#reject-dialog");
   dialogDiv.dialog({
        autoOpen: false,
        modal: true,                    
        buttons: [
            {
                text: "OK",
                id: "confirm-reject",
                click: function() {
                    dialogDiv.dialog("close");
                      console.log('confirm');
                }
            },
            {
                text: "Cancel",
                id: "cancel-reject",
                click: function(){
                    dialogDiv.dialog("close");
                    console.log('reject');
                }
            }
       ]
   });
   $("#btn-reject").click(function (e) {
       e.preventDefault();

       dialogDiv.dialog('open');
   });
});  //dom

</script>
$('#cancel-reject').click(function () {
    $("#reject-dialog").dialog('close');
    console.log('confirm');
});
$(document).on('click','#cancel-reject', function () {
    $("#reject-dialog").dialog('close');
    console.log('confirm');
});
"Confirm": {
    text: "OK",
    id: "confirm-reject",
    click: function(){} // or jQuery.noop()
}