Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jqueryui';带有ajax调用的s dialog()函数_Javascript_Jquery_Html_Ajax - Fatal编程技术网

Javascript 使用jqueryui';带有ajax调用的s dialog()函数

Javascript 使用jqueryui';带有ajax调用的s dialog()函数,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我试图在用户单击表单元格中的内容时显示一个弹出窗口(使用Jquery UI的dialog()函数)。我使用从RESTURL上的Ajax调用返回的数据填充表。我得到了正确的数据,表格显示正确。问题是没有调用表单元格内文本的click()函数 罪魁祸首似乎是Ajax调用,因为相同的方法适用于表中的静态数据 html文件中的代码段: <head> $(document).ready(function(){

我试图在用户单击表单元格中的内容时显示一个弹出窗口(使用Jquery UI的dialog()函数)。我使用从RESTURL上的Ajax调用返回的数据填充表。我得到了正确的数据,表格显示正确。问题是没有调用表单元格内文本的click()函数

罪魁祸首似乎是Ajax调用,因为相同的方法适用于表中的静态数据

html文件中的代码段:

            <head>
                $(document).ready(function(){
                            $("#dlg1").dialog({ autoOpen: false });
                            $('.linkClass1').click(function() {
                                $("#dlg1").dialog("open");
                            });
                            $.ajax({
                                url: "http://localhost:8080/abc/rest/def",
                                type: "GET",
                                contentType: 'application/json; charset=utf-8',
                                success: function(resultData) {
                                    var len = resultData.length;
                                    var table = $('<table></table>').addClass('tableClass1');
                                    var hRow = $('<tr></tr>');
                                    var hVar1 = $('<th></th>').addClass('headingClass1').text("col1");
                                    hRow.append(hVar1);
                                    table.append(hRow);
                                    for(i=0; i<len; i++)
                                    {
                                        row = $('<tr></tr>');
                                        var var1 = $('<td></td>').addClass('cellClass1');
                                        var linkVar1 = $('<a>')
                                                        .attr('class', 'linkClass1')
                                                        .attr('href', '#dummyId')
                                                        .text(resultData[i].id);
                                        var1.append(linkVar1);
                                        row.append(var1);
                                        table.append(row);
                                    }
                                    $(table).attr("id","tableId1");
// this table is appended to an html element and is correctly displayed
                                },
                             });
                        });
            </head>

        <body>

    <div id="dlg1" title="Basic dialog">
                    <p>This is the default dialog which is useful for displaying information. The dialog window can be moved, resized and closed with the 'x' icon.</p>
                </div>
        </body>

$(文档).ready(函数(){
$(“#dlg1”)。对话框({autoOpen:false});
$('.linkClass1')。单击(函数(){
$(“#dlg1”)。对话框(“打开”);
});
$.ajax({
url:“http://localhost:8080/abc/rest/def",
键入:“获取”,
contentType:'application/json;charset=utf-8',
成功:函数(resultData){
var len=resultData.length;
var table=$('').addClass('tableClass1');
var hRow=$('');
var hVar1=$('').addClass('headingClass1').text(“col1”);
hRow.append(hVar1);
表.追加(hRow);

对于(i=0;i,在绑定到$('.linkClass1')时。单击.linkClass1还不存在,或者在ajax成功结束时绑定到它,或者使用它

$('body').on('click', '.linkClass1', function

当前位置。

此代码仅调用一次:

$('.linkClass1').click(function() {
    $("#dlg1").dialog("open");
});
这意味着它只会找到调用时存在的
.linkClass1
元素,并且只会将
单击
处理程序绑定到这些元素。记住这一点

因此,本质上发生的事情是,这段代码从未将
click
处理程序分配给AJAX调用后添加的元素

您可以通过将事件处理委托给一个在DOM生命周期内不会更改的公共父元素来解决此问题。任何父元素都可以,
document
通常是一个可行的默认值。如下所示:

$(document).on('click', '.linkClass1', function() {
    $("#dlg1").dialog("open");
});
这将把点击处理程序分配给
文档
而不是元素,并且假设没有任何东西阻止
点击
将“冒泡”的事件的传播从单击的元素到每个父元素,一直到
文档
。该代码中的第二个选择器是一个过滤器,用于仅响应源自匹配元素的
单击
事件。

详细答案 与其应用jQuery单击处理程序,不如使用
href
onclick
标记调用所需函数,如下所示:

function openDialog(){
    $("#dlg1").dialog("open");
}

...
for(i=0; i<len; i++) {
    row = $('<tr></tr>');
    var var1 = $('<td></td>').addClass('cellClass1');
    var linkVar1 = $('<a>')
        .attr('class', 'linkClass1')
        .attr('href', '#dummyId')
        .attr("onclick", openDialog)
        .text(resultData[i].id);
    var1.append(linkVar1);
    row.append(var1);
    table.append(row);
}
....

一篇很好的博客文章很好地阐明了这个概念。干得好@David。
$(document).ready(function(){
    $("#dlg1").dialog({ autoOpen: false });
    
    $.ajax({
        url: "http://localhost:8080/abc/rest/def",
        type: "GET",
        contentType: 'application/json; charset=utf-8',
        success: function(resultData) {
            var len = resultData.length;
            var table = $('<table></table>').addClass('tableClass1');
            var hRow = $('<tr></tr>');
            var hVar1 = $('<th></th>').addClass('headingClass1').text("col1");
            hRow.append(hVar1);
            table.append(hRow);
            for(i=0; i<len; i++)
            {
                row = $('<tr></tr>');
                var var1 = $('<td></td>').addClass('cellClass1');
                var linkVar1 = $('<a>')
                                .attr('class', 'linkClass1')
                                .attr('href', '#dummyId')
                                .text(resultData[i].id);
                var1.append(linkVar1);
                row.append(var1);
                table.append(row);
            }
            $(table).attr("id","tableId1");
            $('.linkClass1').click(function() {
                $("#dlg1").dialog("open");
            });
        },
     });
});