额外追加后点击功能不起作用
onclick function not working after extra append
>我遇到了一个令人恼火的问题,我找不到解决方案。希望你能帮我解决这个问题。欢迎所有帮助。
情况
我已经为我正在处理的网站创建了一个滑块。为了手动在选项卡之间切换,我通过javascript添加了一些可点击的div,它将相应的选项卡带到前面。现在我添加了一个暂停/播放滑块的选项,因此在暂停时它不会在选项卡中循环
。法典
for ( i = 0; i < imageTextTemp.length; i++)
{
var temp = [];
marginLeftValue = i * 23 + 10;
$(tabs).append( "<div class='subdiv_" + i + "' id='subDiv' style='margin-left: " + marginLeftValue + "px; margin-top: -40px;' onclick='setImageSlider(" + i + ")'></div>");
temp.push(imageTextTemp[i].getElementsByTagName("location_big")[0].childNodes[0].nodeValue);
temp.push(imageTextTemp[i].getElementsByTagName("location_small")[0].childNodes[0].nodeValue);
temp.push(imageTextTemp[i].getElementsByTagName("url")[0].childNodes[0].nodeValue);
temp.push(imageTextTemp[i].getElementsByTagName("column")[0].childNodes[0].nodeValue);
imageText.push(temp);
}
marginLeftValue = marginLeftValue + 46;
$(tabs).append( "<div class='pauseplaySlider' id='pauseplay' style='margin-left: " + marginLeftValue + "px; margin-top: -40px;'></div>");
在此过程的稍后阶段,将发生以下情况:
document.getElementById('pauseplay').setAttribute("onclick", "pauseSlider();");
$('#pauseplay').css('background-image', 'url("' + siteUrl + 'includes/images/pause.png")');
解释
imageTextTemp
是横幅图像数组。 tabs
是必须在其中显示按钮的div。temp
数组对于这种情况不是很有趣,但是因为它位于两个有趣的代码之间,所以我把它留在那里。
问题
现在奇怪的部分:一旦我添加了最后一个追加,在 for 循环之外,for 循环内追加的 onclick 函数就停止工作了。
影响
在添加最后一个pauseplaySlider
之前,tabs
div 在那里做了应有的工作。他们直接将您带到相应的滑块,而无需等待。添加最后一个pauseplaySlider
后,tabs
div 停止工作,但暂停/播放按钮工作正常,没有任何问题。他们应该同时工作。
问题
为什么两者不能同时工作?
试
- 我已经尝试将 for 循环中的点击更改为
alert(" + i + ");
这也不起作用。
在 for 循环 - 外部注释附加后,for 循环中的div 再次开始工作。
- 将
pauseplay
div 的点击更改为alert(1);
后,实际上没有任何变化。pauseplay
给出了值为 1 的警报,而 for 中的div 仍然不起作用。
编辑
在对这个问题做出多次反应后,我更改了以下内容:
- 我已将
document.getElementById('pauseplay').setAttribute("onclick", "pauseSlider();");
更改为$('#pauseplay').on("click",function () { pauseSlider(); });
我已将 for 循环中的附加更改为:
$(tabs).append( "<div class='subdiv_" + i + "' id='subDiv' style='margin-left: " + marginLeftValue + "px; margin-top: -40px;'></div>"); $('.subdiv_' + i).on("click",function () { setImageSlider(i); });
这确实使代码更加JQuery,但它并不能解决我的问题。
如果你使用jQuery,你可以做这样的事情
$('#pauseplay').on("click", pauseSlider());
你的#pauseplay
div是动态创建的,所以在这种情况下不应该onclick
简单,一旦你使用jquery,你就应该尝试像smth一样
$(tabs).on('click', '#pauseplay', function(){
//do your stuff
})
当#pauseplay
元素动态附加到你的 DOM 时,javascript 无法识别它。
您必须使用事件委派:
j查询:
$(document).on('click', '#pauseplay', function() {
// your code ..
});
相关文章:
- 使用复杂数组时Jquery自动完成功能不起作用
- 切换功能不起作用
- 为什么不是'我的修剪功能不起作用
- Angular UI Select2指令搜索功能不起作用
- AngularJS 路由功能不起作用
- JavaScript更新功能不起作用
- JS表单验证功能不起作用
- 复选框树视图功能不起作用
- Web音频-AudioParam调度功能不起作用
- 复选框单击功能不起作用
- jQuery加载函数后,jQuery UI自动完成功能不起作用
- 按下空格键一次后,Jquery功能不起作用
- jquery ajax调用后,表分类器功能不起作用
- jquery对话框可拖动功能不起作用
- 我的数字检查器功能不起作用,为什么
- 隐藏/显示加载功能不起作用
- .slideToggle-on.click功能不起作用
- 验证功能不起作用
- 在我的项目中,添加、删除和编辑功能不起作用
- Onsubmit功能不起作用