我有一些代码,我循环遍历页面上的所有选择框,并将.hover事件绑定到它们,以便在它们的宽度上做一些麻烦mouse on/off.
这发生在页面准备就绪并且工作得很好.
我遇到的问题是,我在初始循环后通过Ajax或DOM添加的任何选择框都不会受到事件限制.
我找到了这个插件(jQuery Live Query Plugin),但在我用插件添加另外5k到我的页面之前,我想知道是否有人知道这样做的方法,无论是直接使用jQuery还是通过其他选项.
假设我有一些jQuery代码,它将事件处理程序附加到具有类"myclass"的所有元素.例如:
$(function(){
$(".myclass").click( function() {
// do something
});
});
Run Code Online (Sandbox Code Playgroud)
我的HTML可能如下:
<a class="myclass" href="#">test1</a>
<a class="myclass" href="#">test2</a>
<a class="myclass" href="#">test3</a>
Run Code Online (Sandbox Code Playgroud)
这没有问题.但是,请考虑是否在将来某个时间将"myclass"元素写入页面.
例如:
<a id="anchor1" href="#">create link dynamically</a>
<script type="text/javascript">
$(function(){
$("#anchor1").click( function() {
$("#anchor1").append('<a class="myclass" href="#">test4</a>');
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当用户点击#anchor1时会创建"test4"链接.
"test4"链接没有与之关联的click()处理程序,即使它具有class ="myclass".
知道如何解决这个问题吗?
基本上,我想编写一次click()处理程序,并将其应用于页面加载时出现的内容和稍后通过Ajax/DHTML引入的内容.
我的HTML:
<div id="x" onclick="clickHandler(event)">
<div id="button1">This turns green</div>
<div id="button2">This turns blue</div>
</div>
Run Code Online (Sandbox Code Playgroud)
首先,为什么我应该将"事件"传递给点击处理程序并且事件是某种系统关键字?此外,由于在容器div上标识了单击处理程序,我如何知道单击了哪个按钮?
这似乎是一个愚蠢的问题,但只是得到了bootstrap并且它没有在网站上给出关于向按钮添加Javascript回调的任何示例...
尝试将我的按钮设置为id标志然后
<div class="btn-group">
<button id="rectButton" class="btn">Rectangle</button>
<button class="btn">Circle</button>
<button class="btn">Triangle</button>
<button class="btn">Line</button>
<button class="btn">Curve</button>
<button class="btn">Pic</button>
<button class="btn">Text</button>
<button class="btn">Gradient</button>
</div>
Run Code Online (Sandbox Code Playgroud)
我想为Rectangle按钮添加一个回调...
$('#rectButton').on('show', function (e) {
//ACTION
})
Run Code Online (Sandbox Code Playgroud)
无法获得引导回调的重点.
我在Web上找到的所有内容都面向Rails + Bootstrap ...没有bootstrap和JS.
我还没有看到这个函数的来源,但我想知道,它是否像这样工作:
setInterval在该选择器上运行并不断取消委托,然后重新委派相同的事件或者对此有一个纯JavaScript DOM解释?
在vanilla js中进行事件授权的最佳方式(最快/最合适)是什么?
例如,如果我在jQuery中有这个:
$('#main').on('click', '.focused', function(){
settingsPanel();
});
Run Code Online (Sandbox Code Playgroud)
我怎样才能将其翻译成香草js?或许有.addEventListener()
我能想到这样做的方式是:
document.getElementById('main').addEventListener('click', dothis);
function dothis(){
// now in jQuery
$(this).children().each(function(){
if($(this).is('.focused') settingsPanel();
});
}
Run Code Online (Sandbox Code Playgroud)
但这似乎效率低下,特别是如果#main有很多孩子.
这是正确的方法吗?
document.getElementById('main').addEventListener('click', doThis);
function doThis(event){
if($(event.target).is('.focused') || $(event.target).parents().is('.focused') settingsPanel();
}
Run Code Online (Sandbox Code Playgroud) 我只有一个可点击的添加按钮,可以添加新的表格行.表行包括删除按钮.我注意到,当我动态添加新行时,按钮不会触发click事件,但如果页面加载时该按钮存在,那么它可以正常工作.我怎么能纠正这个?
使用Javascript:
$('#btnAdd').click(function () {
var newTr = '<tr><td><input id="column_0" name="column[0]" style="width:40%;" type="text" /> <img alt="Delete-icon24x24" class="btnDel clickable" id="" src="/assets/delete-icon24x24.png" /></td></tr>';
$('#columns').append(newTr);
});
$('.btnDel').click(function () {
alert('hey');
console.log('test');
var row = $(this).closest("tr");
alert(row);
row.remove();
});
Run Code Online (Sandbox Code Playgroud) 我意识到我可能需要全局声明onclick事件,但我试图避免--bare在编译时使用标记.
这是我试图开始工作的代码......
jQuery ->
$('.tabs_image').click ->
$(this).addClass('tabs_selected')
$('.tabs_video').removeClass('tabs_selected')
$('#image_upload_form').show()
$('#video_upload_form').hide()
return
$('.tabs_video').click ->
$(this).addClass('tabs_selected')
$('.tabs_image').removeClass('tabs_selected')
$('#image_upload_form').hide()
$('#video_upload_form').show()
return
return
Run Code Online (Sandbox Code Playgroud)
一旦页面在浏览器Chrome中刷新(刷新点击),它就可以正常工作.
我曾尝试$ =>,$(document).ready ->和$(document).ready =>.
我有一个ajax调用,它使用以下代码为响应中的每个记录向数据表添加一些行:
strAppName = data.Application_Name
maintCost = '<input class="maintCostField" appid="' + data.Application_ID + '" type="text" placeholder="$">';
$('#myReport').dataTable().fnAddData([
strAppName,
maintCost,
etc,
etc
]);
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下选择器/事件来捕获对文本框的更改,但它们都没有触发.它们在document.ready部分......
$(".maintCostField").bind('change',function () {
val = $(this).val();
app = $(this).attr('appid');
alert('Updating app# ' + app + ' with ' + val);
});
$(".maintCostField").on('change',function () {
val = $(this).val();
app = $(this).attr('appid');
alert('Updating app# ' + app + ' with ' + val);
});
Run Code Online (Sandbox Code Playgroud)
(我知道这个已被弃用)
$(".maintCostField").live('change',function () {
val = $(this).val();
app = $(this).attr('appid');
alert('Updating app# ' + app + …Run Code Online (Sandbox Code Playgroud) 当我选中复选框时,我试图解雇JQuery.起初我意识到我的JQuery只适用于静态元素.我阅读了几篇文章,发现我需要.on("click,function())才能为动态添加的元素触发相同的javascript.
但是,这种方法对我来说仍然不起作用.有人可以帮忙吗?谢谢.
$(document).ready(function(){
$("input[name='todo']").on('click', function(){
var isChecked = this.checked
if (isChecked == true){
$(this).next().remove();
$(this).remove();
}
if (isChecked == false)
{
alert("checkbox is NOT checked");
}
});
});
Run Code Online (Sandbox Code Playgroud)
我的示例应用程序:http://jsfiddle.net/JSFoo/7sK7T/8/
javascript ×7
jquery ×7
events ×2
click ×1
coffeescript ×1
dhtml ×1
dom ×1
html ×1
jquery-on ×1
onchange ×1
onclick ×1
turbolinks ×1