将click事件应用于UL内的LI而不是按钮

时间:2014-10-30 19:11:02

标签: javascript jquery dom frameworks html-lists

我真的需要你的帮助。

如何从按钮单击(重命名)移动到启动我的重命名功能到UL LI内的单击事件。我想将$('button').click(fn);移动到LI,其价值是'重命名'。当我离开按钮并创建单独的右键单击菜单时,触发我的重命名功能的click事件来自LI点击非常重要。

这是一个小提琴:http://jsfiddle.net/29objbzx/1/

附上预期结果的图片:

enter image description here

有问题的代码:

$(function(){


    $('#refdocs_list li').click(fn);

    $('button').click(fn);

    function fn(e){
    var el = $('#refdocs_list li.selected');
    if(e.target.type != "button"){
            el.removeClass('selected');
            $(e.target).addClass('selected');
    }else{  
        var txt = el.text(); 
        var newEl = $("<input id='rename_refdoc'>");
        newEl.blur(function(){
            el.html(newEl.val());       
        });
        newEl.val(txt);
        el.html(newEl);  
        newEl.focus().select();
    }     
    }   
})();

我在想:

$('#right-click-menu li:eq(5)').click(function(e) {
    fn(e);
});

但它也没有用。

1 个答案:

答案 0 :(得分:0)

编辑:只需将按钮处理程序添加到li并更改条件以检查ID而不是按钮目标。见下面的代码。

注意:已删除HTML中的onclick功能,并将ID属性添加为renameLI

DEMO: http://jsfiddle.net/29objbzx/2/

    $('#renameLI').click(fn);
    $('#refdocs_list li').click(fn);

    function fn(e) {
      var el = $('#refdocs_list li.selected');
      if (e.target.id != "renameLI") {
        el.removeClass('selected');
        $(e.target).addClass('selected');
      } else {
        var txt = el.text();
        var newEl = $("<input id='rename_refdoc'>");
        newEl.blur(function() {
          el.html(newEl.val());
        });
        newEl.val(txt);
        el.html(newEl);
        newEl.focus().select();
      }
    }
* {
  font-family: Segoe UI;
  font-size: 9pt;
}
#refdocs {
  border: 0;
  width: 100%;
  height: auto;
  padding-left: 2px;
}
#refdocs_main {
  border-top: 1px solid rgb(170, 170, 170);
  border-left: 1px solid rgb(170, 170, 170);
  border-right: 1px solid rgb(170, 170, 170);
  border-bottom: 1px solid rgb(170, 170, 170);
  width: 179px;
  overflow: hidden;
  margin-bottom: 2px;
  margin-top: 1px;
}
#refdocs_main:hover {
  border-color: rgb(128, 128, 128);
}
#refdocs_container {
  border-bottom: 1px solid rgb(170, 170, 170);
  height: 20px;
}
#refdocs_wrapper {
  height: 116px;
  overflow-y: scroll;
  overflow-x: hidden;
}
#refdocs_list {
  width: 100%;
}
#refdocs_list ul {
  margin: 0;
  padding: 0px;
  list-style-type: none;
}
#refdocs_list li {
  cursor: default;
  padding: 2px;
}
#refdocs_main:hover,
#refdocs_main:hover #refdocs_container {
  border-color: rgb(128, 128, 128);
}
.selected {
  background: rgb(228, 228, 228);
}
#rename_refdoc {
  border: 0;
  width: 100%;
  padding: 0px;
  margin: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<button type="button">rename</button>
<div id="refdocs_main">
  <div id="refdocs_container">
    <input type="text" id="refdocs" />
  </div>
  <div id="refdocs_wrapper">
    <div id="refdocs_list">
      <ul>
        <li>red</li>
        <li>green</li>
        <li>blue</li>
        <li>yellow</li>
        <li>orange</li>
        <li>purple</li>
      </ul>
    </div>
  </div>
</div>
<br>
<br>
<div id="right-click-menu">
  <ul>
    <li onclick="refdocs_copy()">Copy</li>
    <li onclick="refdocs_paste()">Paste</li>
    <li onclick="refdocs_add()">Add</li>
    <li onclick="refdocs_delete()">Cut</li>
    <li onclick="refdocs_clear()">Clear list</li>
    <li id="renameLI">Rename</li>
  </ul>
</div>


修改:更新了您的代码以使用相同的功能。见下文,

<强> DEMO

  1. 删除了其他内容,因为我们点击LI
  2. 即可执行按钮功能
  3. 如果首次点击时未选择任何内容,则获取所选元素
  4. <强>代码:

    $(function () {
        $('#refdocs_list li').click(function (e) {
            fn(e);
        });
        $('button').click(fn);
    
        function fn(e) {
            var el = $('#refdocs_list li.selected');
            if (e.target.type != "button") {
                el.removeClass('selected');
                $(e.target).addClass('selected');
            }
            el = $('#refdocs_list li.selected');
            var txt = el.text();
            var newEl = $("<input id='rename_refdoc'>");
            newEl.blur(function () {
                el.html(newEl.val());
            });
            newEl.val(txt);
            el.html(newEl);
            newEl.focus().select();
    
        }
    });
    

    如果我理解正确,您想要点击LI重命名列表,就像点击重命名按钮一样。

    $('#refdocs_list li').click(function (e) {
        fn(e);
        $('button').click();
    });
    

    DEMO