0

不要看代码,我会尽量写伪代码,让你理解我的想法和我的问题。所以想象一下我有这样的功能(注意var name = $('#name').val();

  function createFolder(button1, button2, element){

    var btns = {};
    btns[button1] = function(){
       var name = $('#name').val();
      .....
      $(this).dialog("close");
    };
    btns[button2] = function(){
      // Do nothing
      $(this).dialog("close");
    };
    $("<form><input type='text' id='name' name='name'/></form>").dialog({
      autoOpen: true,
      title: 'Condition',
      modal:true,
      buttons:btns
    });
  }

基本上它只是一个对话,它以一个表单和 2 个按钮的形式打开。

好吧,当 DOM 加载我的插件激活做一些魔术,运行公开的表 <tr> 标签和每个<a>标签获取事件处理程序附加到它。像这样的东西:

function initialize(){
  ...Some magic here...
  .....

  node.find('#action-links').children().on('click',function(e){
     createFolder( node,'Create Folder', 'Cancle' );

  }
  .....
}

发生的情况是 ,在该 createFolder 函数中,我再次调用 initialize ,并且相同的元素 #action+link 获得超过 1 个事件处理程序,当我单击第二次、第三次等时会执行多次。我通过删除旧的事件处理程序来处理它。就我所尝试的而言,jquery 停止传播方法也有帮助。

我不明白的是为什么当我在变量“名称”中获取输入值时,第一次得到它很漂亮,但是当我点击第二次、第三次等时,我总是得到我第一次插入的值而不是新值我插入 . 如果我不在 createFolder 函数中调用初始化,并且不分配多个事件处理程序,一切正常。我认为事件处理程序有问题......但我又不确定了。

4

1 回答 1

0

您不断创建具有相同 id 的新表单元素。由于 ids 应该是唯一的,它似乎只引用您创建的第一个元素。不要一遍又一遍地创建表单,createFolder函数的最后一部分应该是这样的:

if (!$('#form-name').length) {
    $('body').append($("<form id='form-name'><input type='text' id='name' name='name'/></form>"))
}
$("#form-name").dialog({
    // etc
});
于 2012-07-17T13:21:46.373 回答