【发布时间】:2019-05-22 12:48:03
【问题描述】:
目前,当用户在输入字段中更改某些内容并单击“检查”图标时,我正在使用简单的 AJAX 放置请求。下面的代码不会将图标从“编辑”更改为“检查”,但是当我使用 AJAX 请求删除一行 $.when($(icon).trigger("click")).then(function(){ 时,图标会更改。
我非常感谢任何有关相应 jquery 指令的帮助
$(document).ready(function() {
$('.clickable-edit-icon').click(function(e){
e.preventDefault();
var delete_id = $(this).closest('tr').data('contact-id');
var icon = $(this).children();
var input = $(this).parent().children('input');
var input_text = $(input).text();
if (icon.text() == "edit") {
$(input).prop('disabled', false);
$(icon).text("check");
$.when($(icon).trigger("click")).then(function(){
$.ajax({
url: 'edit/'+delete_id+'/',
method: 'PUT',
data: {},
contentType:'application/json',
error: function(result){},
success: function(result) {}
});
});
}else{
$(input).prop('disabled', true);
$(icon).text("edit");
}
});
});
HTML 结构
<tr>
<td id="contact-first-name">
<input value="{{ contact.first_name }}" disabled>
<span class='clickable-edit-icon'>
<i class='tiny material-icons'>edit</i>
</span>
</td>
</tr>
如果您想知道为什么我写了var input = $(this).parent().children('input'); 而不是var input = $(this).parent('input');,原因是第二种情况下的输入未定义。
【问题讨论】:
-
这里不太清楚你在问什么。也许 MCVE 会更清楚。另请注意,将
trigger()放入$.when()处理程序是多余的,因为它不是异步进程。此外,您还双重包装了几个 jQuery 对象。 -
@Rory McCrossan 你必须知道,现在我正在学习 jQuery 并且有很多东西我必须学习 :)。将需要 Input 和 input_text 变量来验证后续代码中的旧字符串和新字符串。现在我要求只有在用户处于编辑模式并单击“检查”图标时才能启动 AJAX 功能。
-
If you wondering why I wrote....不,我们不会奇怪,因为这两个语句不等价。第一个寻找共享同一父母的不同孩子。第二个寻找父母本身。如果您愿意,您可以使用siblings() 来完成这项工作。 -
如果你解决了它,你应该把它写成答案,而不是评论。允许和鼓励回答您自己的问题:-)
-
啊...这是因为您将类添加到现有元素。 jQuery 检测到这一点,并且由于您已经单击了该元素,因此假设您想要执行委托处理程序。总体而言,更好的方法可能是根据需要显示和隐藏两个元素,而不是更改现有元素的用途。演示:jsfiddle.net/hre9ptgf
标签: jquery django materialize