天道酬勤,学无止境

如何观察“searchTerm”输入字段的值变化?(How to have the `searchTerm` input field being observed for its value change?)

问题

我有两个可以正常工作的观察:

@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;

ngOnInit() {
  ...
  merge(this.sort.sortChange, this.paginator.page)
  .pipe(
    startWith({}),
    switchMap(() => {
      return this.getUsers(this.sort.active, this.sort.direction, this.paginator.pageIndex);
    }),
    map(userApi => {

这允许在更新排序或分页时调用getUsers服务方法。

现在,我还想在输入搜索词时调用此服务方法:

@ViewChild(String) searchTerm: string;
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;

ngOnInit() {
  ...
  merge(this.searchTerm.length, this.sort.sortChange, this.paginator.page)
  .pipe(
    startWith({}),
    switchMap(() => {
      return this.getUsers(this.searchTerm, this.sort.active, this.sort.direction, this.paginator.pageIndex);
    }),
    map(userApi => {

使用以下模板标记:

<mat-form-field>
    <input matInput #searchTerm (keyup)="search($event.target.value)" placeholder="User name" autocomplete="off">
</mat-form-field>

但是服务方法永远不会被调用,甚至在页面加载时也不被调用。

我的想法是让 searchTerm 成为一个可观察的对象,并通过merge方法观察这个可观察对象。 这样我只有一个方法调用getUsers服务方法。

我也试过这个语句(没有.length )但它没有改变任何东西:

merge(this.searchTerm, this.sort.sortChange, this.paginator.page)

更新:我现在正在沿着这条线尝试一些东西:

@ViewChild('searchTerm') searchTerm: ElementRef;

merge(this.searchTerm.nativeElement.changes, this.sort.sortChange, this.paginator.page)

search事件处理程序确实更新了searchTerm成员变量:

  search(searchTerm: string) {
    this.searchTerm.nativeElement.value = searchTerm.trim().toLowerCase();

    if (this.paginator) {
      this.paginator.firstPage();
    }
  }

我想我可以获取输入字段元素的值来调用服务方法:

return this.getUsers(this.searchTerm.nativeElement.value, this.sort.active, this.sort.direction, this.paginator.pageIndex);

但是,如果merge包含this.searchTerm.nativeElement.changes ,则不会触发,如下所示:

merge(this.searchTerm.nativeElement.changes, this.sort.sortChange, this.paginator.page)

如何观察searchTerm输入字段的值变化?

回答1

我终于可以解决这个问题,使用一个EventEmitter对象:

@Input() searchTerm: string;
@Output() searchTermEvent = new EventEmitter<{ value: string }>();

merge(this.searchTermEvent, this.sort.sortChange, this.paginator.page)
  .pipe(
    startWith({}),
    switchMap(() => {
      this.isLoadingResults = true;
      return this.getUsers(this.searchTerm, this.sort.active, this.sort.direction, this.paginator.pageIndex);
    }),

该事件与处理程序一起发出:

search(searchTerm: string) {
  this.searchTerm = searchTerm;
  this.searchTermEvent.emit({
    value: this.searchTerm
  });

  if (this.paginator) {
    this.paginator.firstPage();
  }
}

getUsers服务方法在每个输入字符上启动。

也许有更好的选择,但目前效果很好。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Angular中的不纯管道是什么?(What is an impure pipe in Angular?)
    问题 @Pipe({name:'myPipe', pure: false}) 我无法理解不纯净的管道。 纯管道和不纯管道有什么区别? 请用一个简单的基本示例进行说明。 回答1 仅当Angular检测到传递给管道的值或参数的更改时,才调用纯管道。 无论值或参数是否更改,每个更改检测周期都会调用不纯管道。 这与Angular未检测到的更改有关 当您传递内容已更改的数组或对象时(但仍是同一实例) 当管道注入服务以访问其他值时,Angular无法识别它们是否已更改。 在这些情况下,您可能仍然希望执行管道。 您应该意识到,不纯净的管道容易造成效率低下。 例如,当将数组传递到管道中以进行过滤,排序等时,则可能每次运行更改检测(通常情况下,尤其是使用默认的ChangeDetectionStrategy设置)事件时都会完成此工作,尽管该数组甚至可能都没有更改。 您的管道应尝试识别这一点,例如返回缓存的结果。 回答2 除了先前的答案之外,我还要添加另一个区别:实例数。 假设在HTML代码中多次使用管道。 喜欢: <p> {{'Hello' | translate }}<p> <p> {{'World' | translate }}<p> 如果管道是纯管道:管道将只有一个实例。 将在同一实例上两次调用transform方法。 如果管道不纯净:将有两个管道实例。
  • AngularJS 摘要循环究竟是如何工作的?(How exactly does the AngularJS Digest Loop work?)
    问题 我是 AngularJS 的新手,我正在教程中学习它。 我对与 Angular 提供的Digest Loop相关的概念有一些疑问。 我的应用程序由以下 2 个文件组成: 1) index.html : <!DOCTYPE html> <html lang="en-us" ng-app="myApp"> <head> <title>Learn and Understand AngularJS</title> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <meta charset="UTF-8"> <!-- load bootstrap and fontawesome via CDN --> <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" /> <style> html, body, input, select, textarea { font-size: 1.05em; } </style> <!-- load angular via CDN --> <script src="//code.angularjs.org/1.3.0-rc.1/angular.min.js"><
  • 是否有一个没有对应的monad转换器的monad(IO除外)?(Is there a monad that doesn't have a corresponding monad transformer (except IO)?)
    问题 到目前为止,我遇到的每个monad(可以表示为数据类型)都有一个对应的monad转换器,或者可能有一个。 有没有一个这样的单子吗? 还是所有单子都有对应的变压器? 对应于单子m的变压器t表示t Identity与m同构。 当然,它满足monad变换器定律,并且tn是任何monad n monad。 我想看看每个单子都有一个的证明(最好是一个有建设性的证明),或者是一个没有单子的特定单子的例子(带有证明)。 我对更多面向Haskell的答案以及(类别)理论的答案都感兴趣。 作为后续问题,是否存在一个具有两个不同的变压器t1和t2的单子m ? 也就是说, t1 Identity与t2 Identity和m同构,但是存在一个单子n ,使得t1 n与t2 n不是同构的。 ( IO和ST具有特殊的语义,因此在这里我不考虑它们,而让我们完全忽略它们。我们只关注可以使用数据类型构造的“纯”单子。) 回答1 我在此使用@Rhymoid,我相信所有Monad都有两个(!!)变压器。 我的构造有点不同,而且还不完整。 我希望能够将此草图用作证明,但我认为我或者缺少技巧/直觉和/或可能涉及其中。 由于Kleisli,每个monad( m )都可以分解为两个函子F_k和G_k ,使得F_k与G_k ,并且m与G_k * F_k同构(此处*是函子组成)。 同样,由于F_k * G_k , F_k *
  • 数据绑定在AngularJS中如何工作?(How does data binding work in AngularJS?)
    问题 数据绑定如何在AngularJS框架中工作? 我尚未在其网站上找到技术细节。 数据从视图传播到模型时,或多或少地清楚了它是如何工作的。 但是AngularJS如何在没有设置者和获取者的情况下跟踪模型属性的变化? 我发现有些JavaScript观察程序可以完成这项工作。 但是Internet Explorer 6和Internet Explorer 7不支持它们。那么AngularJS如何知道例如我更改了以下内容并将此更改反映在视图上? myobject.myproperty="new value"; 回答1 AngularJS会记住该值并将其与先前的值进行比较。 这是基本的脏检查。 如果值发生更改,则将触发更改事件。 从非AngularJS世界过渡到AngularJS世界时调用的$apply()方法称为$digest() 。 摘要只是普通的脏检查。 它适用于所有浏览器,并且完全可以预测。 对比脏检查(AngularJS)和更改侦听器(KnockoutJS和Backbone.js):尽管脏检查似乎很简单,甚至效率很低(我稍后会解决),但事实证明,它一直在语义上是正确的,而变更侦听器有很多奇怪的极端情况,并且需要诸如依赖性跟踪之类的东西才能使其在语义上更加正确。 KnockoutJS依赖项跟踪是AngularJS所没有的问题的一项聪明功能。 变更侦听器的问题: 语法是残酷的
  • 如何使用 Linq 获取 sitecore 字段(how to use Linq to get a sitecore field)
    问题 我有一个搜索,我想排除搜索中具有“标题”字段名称的任何搜索结果。 例如,假设我在搜索栏中输入“联系人”。 我不希望“联系我们”页面出现,但是如果有人想搜索“联系我们”页面中包含单词的内容,那么就可以了。 我能够获取模板名称和 ID,但似乎无法获取字段... Item homeItem = Main.Utilities.SitecoreUtils.getHomeItem(); var query = PredicateBuilder.True<SearchResultItem>(); query = query.And(i => i.Paths.Contains(homeItem.ID)); query = query.And(i => i.Content.Contains(searchTerm)); query = query.And(i => i.TemplateName != "MenuFolder"); 这就是我所拥有的,但我想添加一些内容以排除“标题”字段和“SEO”字段。 所以可能是这样的: query = query.And(i => i.Fields["Title"]; 但在这种情况下,它包括不排除它。 我不能这样做: query = query.And(i != i.Fields["Title"]; 它不会接受那个答案。 回答1 尝试使用像i => !i[
  • 当搜索输入字段被清除时,如何从搜索过滤器中隐藏列表项?(How to hide the List items from Search Filter, when search input field is cleared?)
    问题 我有一个像这样的 HTML 列表项: <ul id="fruits"> <li><a href="#">Mango</a></li> <li><a href="#">Apple</a></li> <li><a href="#">Grape</a></li> <li><a href="#">Cherry</a></li> </ul> 用户不会看到这些项目,因为我们使用样式display: none;将它们全部隐藏起来display: none; . 用户可以从以下input字段中搜索这些项目: <input type="text" id="searchInput" onkeyup="fruitSearch()" placeholder="Search fruits"> 当用户开始在input字段上搜索水果名称时,它会列出匹配的名称,就像谷歌搜索建议一样。 使用下面的 JavaScript 进行搜索: function fruitSearch() { // Declare variables var input, filter, ul, li, a, i; input = document.getElementById('searchInput'); filter = input.value.toUpperCase(); ul = document.getElementById(
  • 如何使用 jQuery 在 Qualtrics 中获取滑块的值?(How to get a slider's value in Qualtrics using jQuery?)
    问题 我需要获取 Qualtrics 中滑块的值以向用户显示(转换)它。 这是我正在处理的页面,因此您可以了解以下内容。 我尝试了很多不同的东西,但都没有奏效。 我的第一个想法当然是: var val = $j('#QID11~1~toolTip').text(); $j('#value').text(val) 什么都不显示。 然后,我尝试使用输入: var val = $j("input").attr("value"); $j('#value').text(val); (或者, $j('#QID11~1~result')而不是$j("input") ,或.val()而不是.attr("value") )同样的事情:没有任何显示。 然而,有趣的是,当我用attr(" type")替换attr("value ") 时,类型 ("hidden") 就会出现。 似乎,由于页面首次加载时未设置该值,因此 jQuery 找不到它。 有人可以帮我解决这个问题吗? 回答1 你可以像这样使用prototypejs来做到这一点: Qualtrics.SurveyEngine.addOnload(function() { var current = $('current'); var result1 = $(this.questiondId + "~1~result"); new Form
  • (二)Android Jetpack 组件之数据绑定库 (DataBinding)
    文章目录 1、概述2、如何创建data binding layout 的布局?3、单向数据绑定与双向数据绑定3.1、单向数据绑定3.2、双向数据绑定3.3、具体案例 4、在RecyclerView.Adapter的应用5、总结 1、概述 数据绑定库(DataBinding)是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。 主要特性简单来说: I、取代findVewById这种写法,Butterknife(黄油刀)这个库也可以不用了;II、可以直接在布局文件xml中绑定数据(定义变量、调用变量、控件值可直接赋值变量)(基本数据类型、Map、List、实体)变量;III、数据绑定库支持双向数据绑定。此类绑定使用的表示法支持以下操作:接收对属性的数据更改,同时监听用户对此属性的更新。 使用数据绑定库之前我们需要做2件事: I、在app的build.gradle文件中开启配置dataBinding;II、创建data binding layout布局。 这个支持库在Android Studio3.6.1版本里面已经预制了,所以我们只需要在app的build.gradle文件中添加一行配置即可: dataBinding { enabled = true } 为什么叫数据绑定?根据案例来具体感受吧。 2、如何创建data binding
  • Vue.JS 值绑定在具有焦点的输入上(Vue.JS value tied on input having the focus)
    问题 当输入获得/失去焦点时,有没有办法改变模型中的值? 这里的用例是一个搜索输入,在您输入时显示结果,这些应该只在焦点位于搜索框上时显示。 这是我到目前为止所拥有的: <input type="search" v-model="query"> <div class="results-as-you-type" v-if="magic_flag"> ... </div> 然后, new Vue({ el: '#search_wrapper', data: { query: '', magic_flag: false } }); 这里的想法是,当搜索框获得焦点时, magic_flag应该变为true 。 我可以手动执行此操作(例如,使用 jQuery),但我想要一个纯 Vue.JS 解决方案。 回答1 显然,这就像在事件处理程序上做一些代码一样简单。 <input type="search" v-model="query" @focus="magic_flag = true" @blur="magic_flag = false" /> <div class="results-as-you-type" v-if="magic_flag"> ... </div> 回答2 在更复杂的场景中处理此类事情的另一种方法可能是允许表单跟踪当前处于活动状态的字段,然后使用观察者。
  • 如何在 pudb 中观察变量?(How to watch a variable in pudb?)
    问题 我正在调试一个 python 脚本,我想观察一个变量并在它的值发生变化时得到通知。 有没有办法在pudb做到这pudb ? 回答1 您不能在值发生变化时简单地要求通知(我知道)。 但是,您可以设置监视表达式和条件断点,它们应该提供您正在寻找的功能。 首先,转到变量列表( shift + V ),然后N添加一个新手表。 输入您想观察的任何变量。 现在在你的值可以改变的地方设置一个断点 - 回到主窗口← ,然后找到这些行并点击B 。 然后让您的程序运行到该行或直到您的变量被定义。 然后shift + B选择断点窗口。 按回车键编辑断点。 添加条件表达式 - 由于您的值现在应该已设置,您可以在监视列表中看到该值。 一个简单的<variable> != <current value>应该可以。 或者您可以输入特定条件。 现在←回到主窗口,让你的方案C ontinue。 当您的条件在该断点处为真时,您的程序将停止,您将在观察列表中看到该值。 有关示例,请参阅以下截屏视频:
  • 每次 UITextField 文本属性在 RxSwift 中发生变化时,您如何获得信号(How do you get a signal every time a UITextField text property changes in RxSwift)
    问题 您如何从以编程方式对 UITextField 文本属性进行的更改中获取信号? 通过使用 rx.text 仅在用户通过键盘输入文本时报告信号。 如果您以编程方式设置 textField.text,则不会触发信号。 这就是我使用 rx.text 的方式 (self.phoneNumberTextField.rx.text).orEmpty.subscribe(onNext: { [weak self] (phone) in // do something }).addDisposableTo(disposeBag) self.phoneNumberTextField.text = "this is for test" 谢谢! 回答1 我遇到了同样的问题,显然清扫工的回答对我不起作用。 所以这就是我所做的当我手动设置文本字段的文本时,我在文本字段上调用 ​​sendActions 方法 textField.text = "Programmatically set text." textField.sendActions(for: .valueChanged) 在进一步挖掘之后,我意识到rx.text取决于UIControlEvents并且当您显式设置文本时不会触发这些。 希望这可以帮助 回答2 您可以将 controlEvents 添加到 asObservable:
  • 我将如何制作一个在访问数据库的所有表中搜索值的表单(How would I make a form which searches for values in all tables of a database in access)
    问题 我正在尝试制作一个表单,用于搜索数据库中所有表中的值(有 1 个以上的表)。 结果将显示为出现它的表的名称。如果有人可以帮助我,那就太好了。 简而言之,我有一个带有文本框和按钮的表单。 我输入搜索字符串(例如 183939)并单击按钮。 它在数据库表的所有字段中搜索值(183939),如果找到该值,则显示它出现的表的名称。感谢您的帮助。 回答1 我认为这是一个坏主意,因为它可能需要很长时间,并且由于还搜索系统表而提供令人困惑的结果......但以下函数将返回包含搜索词的所有表名的数组,如果不是,则不返回任何内容没找到。 调用示例是这样的: theTables = containingTable("hello")其中 theTables 是一个变体。 一个限制是这对于多值字段会失败。 Function containingTables(term As String) Dim db As Database Dim tds As TableDefs Dim td As TableDef Set db = CurrentDb Set tds = db.TableDefs For Each td In tds For Each f In td.Fields On Error Resume Next If DCount("[" & f.Name & "]", "[" & td.Name
  • 如何防止“确认表格重新提交”对话框?(How to prevent the “Confirm Form Resubmission” dialog?)
    问题 提交后如何清除表单中的信息,以使页面刷新后不会显示此错误? 查看图片(来自Chrome): 对话框中包含以下文本: 您要寻找的页面已使用您输入的信息。 回到那个页面可能会导致您采取的任何操作重复。 你想继续吗? 我希望此对话框不出现。 回答1 编辑:距离我最初发布此答案已经好几年了,尽管我获得了一些支持,但我对之前的答案并不满意,所以我已经完全重做了。 我希望这有帮助。 何时使用GET和POST : 消除此错误消息的一种方法是使您的表单使用GET而不是POST 。 请记住,这并不总是合适的解决方案(请参阅下文)。 如果您要执行的操作不想重复执行,或者正在传输敏感信息,或者您的表单包含文件上传或者发送的所有数据的长度都超过2000个字符,请始终使用POST 。 何时使用POST示例包括: 登录表格联络表格提交付款表格可以从数据库中添加,编辑或删除条目的东西图像上传器(请注意,如果将GET与<input type="file">字段一起使用,则只会将文件名发送到服务器,这不是您想要的时间(99.73%)。) 具有许多字段的表单(如果使用GET,它将创建一个长URL) 在任何一种情况下,您都不希望人们刷新页面并重新发送数据。 如果您要发送敏感信息,则使用GET不仅不恰当,而且还存在安全问题(即使表单是由AJAX发送的),因为敏感项(例如用户的密码)是在URL中发送的
  • MySQL-如何获得准确相关的搜索结果(MySQL - How to get search results with accurate relevance)
    问题 我已经多次重温了这个问题,但我从未真正找到合适的答案。 是否可以执行MySQL搜索,以按相关性返回ACTUAL准确排序的结果? 我试图创建一个ajax搜索表单,当用户在输入字段中键入内容时提出建议,并且仅使用纯MySQL查询还没有找到合适的解决方案。 我知道有可用的搜索服务器,例如ElasticSearch,我想知道如何仅使用原始MySQL查询来做到这一点。 我有一张学校科目表。 少于1200行,这将永远不会改变。 让我们执行一个基本的FULLTEXT搜索,其中用户开始键入“ Bio”。 查询(“生物...”)-全文布尔模式 SELECT name, MATCH(name) AGAINST('bio*' IN BOOLEAN MODE) AS relevance FROM subjects WHERE MATCH(name) AGAINST('bio*' IN BOOLEAN MODE) ORDER BY relevance DESC LIMIT 10 结果 name | relevance -------------------------------------------------------- Biomechanics, Biomaterials and Prosthetics | 1 Applied Biology | 1 Behavioural Biology
  • 观察 NSArray 内部 NSDictionary 的值变化(Observe value changes of NSDictionary inside NSArray)
    问题 这是我的NSArray carType ( { isSelected = 0; kFieldName = "All types"; kObjectValue = 0; kObjectValueText = All; }, { isSelected = 0; kFieldName = "4 seats"; kObjectValue = 4; kObjectValueText = "4 seats"; }, { isSelected = 1; kFieldName = "7 seats"; kObjectValue = 7; kObjectValueText = "7 seats"; } ) 如何观察isSelected字段的变化? 我在我的代码中使用了 KVO,但它不起作用。 carType是context的NSArray属性 - (void)viewDidLoad { [super viewDidLoad]; [context addObserver:self forKeyPath:@"carType" options:NSKeyValueObservingOptionNew context:NULL]; } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change
  • 如何在返回的 AJAX 调用上使用 django 模板标签?(How to use django template tags on returned AJAX calls?)
    问题 我有一个简单的 AJAX 脚本,它在名为AJAXBox的搜索字段中获取输入的字符串,并调用一个视图函数,该函数使用过滤器查询数据库并返回与输入参数匹配的所有用户对象的查询集。 当我使用 django 模板标签遍历查询集时,它不起作用。 我认为这是因为我的 Javascript 调用的输出实际上并未输出查询集,而是 django 模板无法识别的某种类型的字符串。 我该如何解决这个问题,以便我的 AJAX 调用返回 django 中正常渲染函数输出的真正的 django 兼容查询集? AJAX 的 JS: $(document).ready(function(){ $('#AJAXBox').keyup(function() { var searchedterm; searchedterm = $(this).val(); $.get('/AJAXsearch/', {searchterm: searchedterm}, function(data){ $('#result').html(data); }); }); }); python 代码的 tl;dr 本质上是: def AJAXsearch(request): searchterm = request.GET['searchterm'] result = UserObj.objects.filter(person
  • 对绑定在一起的NSTextField使用KVO(Use KVO for NSTextFields that are bound together)
    问题 我无法让KVO处理在Cocoa应用程序中绑定在一起的文本字段。 我在使用按钮在NSTextFields中设置字符串时可以使用此功能,但不适用于绑定。 与往常一样,非常感谢Stack Overflow提供的任何帮助。 我的代码的目的是: 将几个文本字段绑定在一起当在一个字段中输入数字时,让其他字段自动更新观察文本字段中的更改 这是我的MainClass代码,它是一个NSObject子类: #import "MainClass.h" @interface MainClass () @property (weak) IBOutlet NSTextField *fieldA; @property (weak) IBOutlet NSTextField *fieldB; @property (weak) IBOutlet NSTextField *fieldC; @property double numA, numB, numC; @end @implementation MainClass static int MainClassKVOContext = 0; - (void)awakeFromNib { [self.fieldA addObserver:self forKeyPath:@"numA" options:0 context:&MainClassKVOContext];
  • 按角度 5 中的复选框过滤(Filter by checkbox in angular 5)
    问题 我能够使用管道在输入字段上实现过滤器。 但是我无法使用复选框过滤器来做到这一点。 下面是我的输入过滤器代码。 import { Pipe, PipeTransform } from '@angular/core'; @Pipe({ name: 'filter' }) export class FilterPipe implements PipeTransform { transform(users: any, searchTerm: any): any { // check if search term is undefined if (searchTerm === undefined) { return users; } // return updated users array return users.filter(function(user) { return user.name.toLowerCase().includes(searchTerm.toLowerCase()); }); } } 用户组件.html <input type="text" [(ngModel)]="searchTerm"> <table> <tr *ngFor="let user of users | filter: searchTerm"> <td>{{user.name}}</td>
  • 使用JQuery,如何检测在字段仍具有焦点的情况下文本输入的值是否已更改?(Using JQuery, how do you detect if the value of a text input has changed while the field still has focus?)
    问题 在发布此问题之前,我注意到之前对此主题也发布过类似的问题,但是在这种情况下,用户没有通过使用键盘与文本字段进行交互,在这种情况下,将文本字段绑定到“粘贴”在我的情况下,采取任何行动或其他任何巧妙的建议均行不通。 我们的用户正在输入从条形码中扫描过来的字符串值。 我们正在尝试做的是避免在扫描完信息后让用户放下扫描仪以转到下一个字段的烦恼。 但是,当文本字段仍然具有焦点时,在检测文本字段的值变化时遇到了问题。 这是我们遗漏的难题的唯一部分,因为将焦点应用于表单的下一个字段是微不足道的。 当输入设备不是键盘时,谁能阐明如何检测文本字段的值变化? 我已经尝试使用change()事件,但是直到该字段不再具有焦点时它才会触发。 回答1 您可以只听keypress事件。 <input type="text" id="target" value="" /> var target = $('#target'), val = target.val(); function monitor() { var current_val = $(this).val(); if (current_val != val) { console.log('changed from', val, 'to', current_val); val = current_val; } } target.keypress
  • 如果类中的实例变量的值已更改,如何触发断点?(How do I have a breakpoint get triggered if an instance variable in the class has its value changed?)
    问题 假设我有一个变量self.position ,我如何让 Xcode 在更改其值时中断(许多方法可以更改它)。 回答1 对于有条件中断: Cmd+option 点击​​断点添加一个中断条件,如下所示: 对于每次中断,该值都已更改: 实现简单的 setter(为了干净的代码而使用 getter)。 将断点添加到 setter。 如果您想查看谁调用了 setter - 只需查看堆栈跟踪中的下一行(在我的示例中为 viewDidLoad): 更新: 添加观察点 中断任何地方,以便(lldb)提示显示在控制台中输入watchpoint set variable _position (用你想watchpoint set variable _position替换 _position) 记下为新创建的观察点分配的观察点编号。 修改条件中断的观察点: watchpoint modify -c "_position < 0.5" 1其中引号中的表达式是条件,末尾的数字是您在 #3 中记录的观察点编号。 继续运行。 只要值与条件匹配,您就会中断,并且您将能够检查堆栈帧以了解调用来自何处。 回答2 设置符号断点。 转到断点导航器,单击 +,单击“添加符号断点”。 在第一个字段中,输入 -[YourSubclassNameHere setPosition:]",添加您想要的任何其他设置