我一直在搜索和搜索,但我不是第一个,在我看来这是很平常的事情,但是我找不到(正确的)解决方案。
这是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调用后仍然有效!
我希望有人可以帮助我解决这个问题。