jQuery UI对话重用行为

时间:2015-07-09 18:51:54

标签: javascript jquery jquery-ui-dialog

每次onchange()事件触发时,对话框会递归地嵌套在新图层中。我怎样才能避免这种行为。不是特定于版本的。

http://jsfiddle.net/rqLqtuj5/2/

<input type=text onchange="popDialog(this)" value="test">
<div style="display:none">
    <p>dialog box</p>
<div>

function popDialog(obj) {
$('div')
    .dialog({
    buttons: {
        'Close': function () {
            $(this).dialog('close');
        }
    }
});}

2 个答案:

答案 0 :(得分:1)

嘿,我使用empty()命令清除div,例如:

function popDialog(obj) {
    $('div').empty();
    $('div').dialog({
        buttons: {
            'Close': function () {
                $(this).dialog('close');
            }
        }
    });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>
<p>Change the value in the text box and hit tab ...close the dialog and do it again, and again</p>
<input type=text onchange="popDialog(this)" value="test">
<div style="display:none">
    <p>dialog box</p>
<div>

这种方式更好:JSBIN

答案 1 :(得分:0)

第一次在常规unit64_t to_uint64(std::string const & in) { static_assert(sizeof(unsigned long long) == sizeof(uint64_t), "ull not large enough"); unsigned long long val = 0; std::istringstream stream(in); stream >> val; return val; } 选择器上调用.dialog()时(即,第一次更改输入字段时),jQuery UI会向DOM追加div是你的div元素的兄弟。现在,再次更改输入字段,jQuery UI搜索input以调用div,并找到它在第一次调用后创建的.dialog()并将其转换为对话框。正如您可能看到的那样,这个过程无限期地持续下去。

解决方案是将特定的类或ID分配给您要调用div的{​​{1}},然后在调用div时将该类或ID用作选择器