Ujj*_*ati 1 html javascript jquery
这是场景
$(document).ready(function(){
var rowIndex = 0;
var count = 0;
function callThisFunction(index, value, count) {
alert('called');
}
function dynamicContentAdd() {
rowIndex++;
count++;
var row = "<input name='input["+rowIndex+"]' onkeyup = 'callThisFunction("+rowIndex+","+total[1]+","+count+");' id='input"+rowIndex+"' type='text' class='inputfield' />";
$("#table").append(row);
}
Run Code Online (Sandbox Code Playgroud)
我在单击按钮时就调用了dynamicContentAdd()函数,它工作正常。但是不起作用的是它没有在keyup上调用函数callThisFunction()。出现错误,未定义功能。但是当我在外部js文件中具有相同的功能时,它将成功调用它。这不是从jquery中动态添加的html代码中调用函数的方法吗?
请告诉我。
谢谢
问题是,由于您使用内联事件处理程序,因此js引擎将callThisFunction在全局范围内查找该函数,但是您已将该函数添加到dom ready处理程序中,从而使其成为dom ready处理程序的本地函数,这将导致js引发错误。
解决方案1.将功能设为全局
//since the function is define outside of dom ready handler it is available in the global scope
function callThisFunction(index, value, count) {
alert('called');
}
$(document).ready(function () {
var rowIndex = 0;
var count = 0;
function dynamicContentAdd() {
rowIndex++;
count++;
var row = "<input name='input[" + rowIndex + "]' onkeyup = 'callThisFunction(" + rowIndex + "," + total[1] + "," + count + ");' id='input" + rowIndex + "' type='text' class='inputfield' />";
$("#table").append(row);
}
})
Run Code Online (Sandbox Code Playgroud)
要么
$(document).ready(function () {
var rowIndex = 0;
var count = 0;
//define the function as a property of the window object again making it available in the public scope
window.callThisFunction = function (index, value, count) {
alert('called');
}
function dynamicContentAdd() {
rowIndex++;
count++;
var row = "<input name='input[" + rowIndex + "]' onkeyup = 'callThisFunction(" + rowIndex + "," + total[1] + "," + count + ");' id='input" + rowIndex + "' type='text' class='inputfield' />";
$("#table").append(row);
}
})
Run Code Online (Sandbox Code Playgroud)
解决方案2:jQuery方式-使用具有data- *属性的委托事件处理程序
$(document).ready(function () {
var rowIndex = 0;
var count = 0;
$('#table').on('keyup', '.myfncaller', function(){
var $this = $(this);
var index = $this.data('index'), value = $this.data('value'), count = $this.data('count');
})
function dynamicContentAdd() {
rowIndex++;
count++;
var row = "<input name='input[" + rowIndex + "]' id='input" + rowIndex + "' type='text' class='inputfield myfncaller' data-index='" + rowIndex + "' data-value='" + total[1] + "' data-count='" + count + "' />";
$("#table").append(row);
}
})
Run Code Online (Sandbox Code Playgroud)