我有一个非常典型的表单,带有一些输入和一个提交按钮,但是当我尝试使用jQuery的find()
方法时,我得到了一些令人烦恼的不一致的结果。如下:
$("#frmContact").find(":submit") -> undefined is not a function
$("#frmContact").find(".btn") -> works
$("#frmContact").find(".btn.secondary") -> undefined is not a function
$("#frmContact").find("input[type=submit]") -> works
$("#frmContact input:submit") -> undefined is not a function
$("input[type=submit]", "#frmContact") -> undefined is not a function
$("form").find("input") -> works
$("form").find("input[type=submit]") -> undefined is not a function
这里发生了什么,我该如何解决这个问题?
我从1.9升级后使用jQuery 1.11,希望能解决问题。页面上还有Angular,我会在加载完所有内容后从控制台调用此代码。
我的表单,以防万一你需要它,如下 [EDIT] 更新,以显示Angular类和指令的实际HTML输出:
<form ng-submit="saveContact($event, '/applicants/update_contact?id=1593')" class="ng-pristine ng-valid" _lpchecked="1" id="frmContact">
<h4 class="section-header">Applicant Contact Information</h4>
<field id="email" type="text" model="applicant.email" label="Email address" class="ng-isolate-scope">
<div ng-class="['field', isRequired()]" class="field"> <!-- Text/File/Password Field -->
<label ng-bind="label" class="ng-binding">Email address</label>
<input type="text" ng-model="model" class="ng-pristine ng-valid">
</div>
</field>
<div class="field">
<input type="submit" value="Save" class="btn secondary">
</div>
</form>
我的JavaScript库按以下顺序加载:
脚本加载在页面底部。
答案 0 :(得分:0)
AngularJS附带JQLite,这是一个轻量级的jQuery verison,它是你在这里使用的那个,它给你意想不到的结果。
为了使Angular能够与完整的jQuery一起使用,您需要确保在 Angular 之前加载jQuery 。请注意<script>
代码订单。
答案 1 :(得分:0)
事实证明,将刀握在我喉咙的手是我自己的。
在应用程序开发的早期阶段,通过执行Object
在Object.prototype.findId = function() { ... }
原型上添加几个辅助方法很有用。当尝试在jQuery中执行find()
方法时,这会引发各种各样的地狱。
我把它修好了:
Object.prototype.myMethod = function() { ... }
进入这个
var specialObject = function(object) {
return {
myMethod: function() { ... }
}
}
我没有意识到我之前的做法是如此糟糕,直到我读到这个:Extending Object.prototype JavaScript
谢谢大家的帮助,伙计们。