按钮的 Jquery 单击事件在 ng-if div 中不起作用

Posted

技术标签:

【中文标题】按钮的 Jquery 单击事件在 ng-if div 中不起作用【英文标题】:Jquery click event for button is not working inside ng-if div 【发布时间】:2017-12-04 06:29:26 【问题描述】:

我的项目中有以下代码sn-p

<div class="form-horizontal well text-center" id="func_85" ng-if="prmissionlist.indexOf('chkfunction_85') >= 0">
    <button class="btn btn-primary" type="button" id="btn_branch_save">
        Save
    </button>
    <button class="btn btn-primary" type="button" id="btn_new_branchcancel">
        CANCEL
    </button>
</div>

但按钮点击在ng-if div 内不起作用(按钮点击是使用 jQuery 选择器写入 js 文件中的。)

【问题讨论】:

我觉得是因为div是动态添加的,能不能分享一下你的按钮点击脚本,让我更好的帮忙 是的,当 div(及其内容,即按钮)尚未出现在页面上时,jquery 很可能会尝试绑定 click 事件。另外,我建议坚持使用角度并使用 ng-click 我同意。目前,jquery 语句尝试附加单击事件,该按钮肯定不是由 ng-if 创建的。尝试使用 ng-show 或 ng-hide 而不是 ng-if,只是为了证明这一点。 ng-show 和 ng-hide 不修改 DOM 并且始终存在于 DOM 中。 @TSungur ng-show 正在工作,但要求是使用 ng-if 实现 @emanek 有没有办法用 ng-if 和 jquery 选择器来做到这一点 【参考方案1】:

出现这个问题是因为ng-if动态添加元素到DOM如果条件为真,jquery Direct事件(.click())不能添加到动态添加的元素中所以必须使用委托事件(@ 987654322@) 使其适用于动态添加的元素。

请参阅link 了解有关直接和委托活动的更多信息

用.on()替换你的Jquery点击事件

$('.form-horizontal').on('click','#btn_branch_save',function()

alert('dsfds');

);

作为替代方案,您也可以使用ng-show,它将在加载 DOM 时创建元素,并将可见性应用为隐藏,但是在 Jquery 中使用委托事件总是很好。

但是,我仍然想知道为什么您需要同时使用 Jquery 和 Angular,这并不是很好的做法。

【讨论】:

【参考方案2】:

由于ng-if创建的nested scopes,该按钮不起作用。

来自您的评论: @TSungur ng-show 正在工作,但要求是使用 ng-if 实现

你可以用ng-show代替ng-if,因为这次只是暂时解决了问题。


阅读更多讨论

AngularJS: ng-if not working in combination with ng-click?

jQuery click events not working with AngularJS

【讨论】:

【参考方案3】:

如果你在谈论 angular2+,为了避免你应该在 ngAfterViewChecked() 函数中编写你的 jquery 代码,不要忘记从 'angular/core' 导入它,因为你的所有 dom 都是在 jquery 函数之前加载的,但是我不建议您将 jquery 与 angular 一起使用

【讨论】:

以上是关于按钮的 Jquery 单击事件在 ng-if div 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jQuery 中处理按钮单击事件?

为啥 jQuery 单击事件侦听器未在 WooCommerce 按钮上注册?

jQuery:在按钮单击事件上启用复选框(带有标签)

Jquery按钮单击事件未触发

通过数据表jQuery插件添加的按钮上的jQuery单击事件

添加jquery键盘后,jquery按钮单击事件不起作用