我正在尝试编写一个jquery函数,以便在单击时使文本可编辑。
我正在尝试使用数据attr来查找哪个<p>
并根据用户点击的位置显示和隐藏输入。
我已经控制台记录了正确的数据attr,所以我看不出为什么它不会隐藏<p>
然后显示<input>
有人能看出这个功能有什么问题吗?
<p class="editbox" data-gradeid="1">Original text</p>
<input data-gradeid="1">
<p class="editbox" data-gradeid="2">Original text</p>
<input data-gradeid="2">
$('p').click(function() {
var input = $(this).attr("data-gradeid");
console.log(input);
// $('p').hide();
$('p [data-gradeid='+ input + ']').hide();
$('input [data-gradeid='+ input +']').show();
});.
答案 0 :(得分:0)
您不应在选择器与其自己的属性之间留出空格。
将'p [data-gradeid='
替换为'p[data-gradeid='
。
当你使用空格时,你会说data-gradeid
的某个元素是p
元素的子元素,但事实并非如此。
修改强>
您可以通过以下方式向jQuery库添加enter
函数:
$.fn.enter = function(fx) {
$(this).keypress(function(e) {
e.keyCode === 13 && fx.apply(this);
});
};
然后,在查找性能时,您可以使用$.each()
并存储每个$p
和$input
元素,以避免进一步处理DOM:
$('p[data-gradeid]').each(function() {
var $p = $(this);
var gradeid = $p.data('gradeid');
var $input = $('input[data-gradeid=' + gradeid + ']');
$p.click(function() {
$p.hide();
$input.val($p.html()).show().focus();
});
$input.enter(function() {
$input.hide();
$p.html($input.val()).show();
});
});
但是,我建议您使用blur
事件,如评论中所述。
答案 1 :(得分:0)
可能是$('p [data-gradeid="'+ input + '"]')
周围的引号。
答案 2 :(得分:0)
试试这个:
$(document).ready(function() {
$('p').click(function() {
var input = $(this).attr("data-gradeid");
console.log(input);
// $('p').hide();
$('p[data-gradeid='+ input + ']').hide(1000);
$('input [data-gradeid='+ input +']').show();
})
$("input").keypress(function(event) {
if (event.which == 13) {
$(this).prev("p").show(1000).text($(this).val());
$($(this)).hide();
}
})
})
&#13;
<p class="editbox" data-gradeid="1">Original text</p>
<input data-gradeid="1">
<p class="editbox" data-gradeid="2">Original text</p>
<input data-gradeid="2">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
&#13;