用jQuery进行Ajax调用,之后我的事件选择器不再起作用了吗?

时间:2020-08-02 19:36:09

标签: jquery ajax jquery-selectors

我一直在搜索和搜索,但我不是第一个,在我看来这是很平常的事情,但是我找不到(正确的)解决方案。

这是Joomla,但我认为这不是特定的joomla问题。

我的Ajax通话正常,

jQuery.ajax({
type: "POST",
dataType: "json",
url: getUrl,
data: {task: "Filter", view: "viewname", format: "json", arfilter: arfilter},
success: function(result, status, xhr) {displayFilterResults(result); },
error: function() { console.log('ajax call failed'); },
})

下一步是“ displayFilterResults”功能的一部分,该功能将在再次调用AJAX之后构建表:

....
var strhtml     = '<table id="table_players" class="">';
strhtml    +=   '<tbody>';
strhtml += '<tr>';
strhtml += '<td><input type="checkbox" class="select" id="select_' + result.data[i].cmid + '" name="select_' + result.data[i].cmid + '" value="' + result.data[i].cmid + '"' + checked + '/></td>';
strhtml += '<td><input type="text" id="rownr_' + result.data[i].cmid + '" ... /></td>';
strhtml += '<td><input type="text" id="fnam_' + result.data[i].cmid + '" ...  /></td>';
strhtml += '<td><input type="text" id="bnam_'   + result.data[i].cmid + '" ... /></td>';
strhtml += '<td><input type="text" id="lnam_' + result.data[i].cmid + '" ... /></td>';
strhtml += '<td><input type="text" id="catc_' + result.data[i].cmid + '" ... /></td>';
strhtml += '<td><input type="text" class="update" id="shnr_' + result.data[i].cmid + '" name="shnr_'   + result.data[i].cmid + '" value="' + shirtnr  + '" /></td>';
strhtml += '<td>' + result.data[i].posc + '</td>';
strhtml += '</tr>';
strhtml += ' </tbody>'
strhtml += '</table>';

jQuery('#result').html(strhtml).text(); //This line is writing the result to inner HTML of #result
....

最初打开的表是在服务器的<?php echo $this->form->getInput('fieldname');边创建的,并由在#result的内部HTML中写入过滤结果的最后一行重新创建的:

<div class="controls" id="result"><?php echo $this->form->getInput('fieldname'); ?></div>

如果更改值,还会触发事件选择器“更新”。

jQuery('.update').bind('change',function () {
    console.log('update fired');
});

- 这是我的问题: 我创建了过滤器栏,它正在执行AJAX调用,并且引发了问题。 在AJAX调用之后,将再次构建表,但是不再触发'update'的事件选择器了!

我有点理解了这个问题,DOM已更改-表已完全重新构建并分配给#result的内部HTML,这意味着change事件尚未使用{绑定到输入文本元素{1}}。

但是我该如何解决呢?

我试图将其添加到AJAX调用的完成中,只是将'change'事件选择器绑定到class =“ update”:

class="update"

但是,如果更改输入字段的值,则触发此字段,而不是前面提到的“更改”事件选择器。

什么是正确的方法,在AJAX调用使事件选择器再次工作之后,这意味着如果我更改值,则执行此操作。

值得注意的是,我还为复选框选择了一个click事件,该事件在AJAX调用后仍然有效!

我希望有人可以帮助我解决这个问题。

0 个答案:

没有答案