2016-11-26 33 views
1

我有这个输入文本字段,我想选择(突出显示)前3个字符,当它改变时。在使用JQuery触发器更改INPUT文本字段时选择特定文本

<input class="descriptions" value="temp text"/> 

而且我有此脚本监视onChange事件......

$(document).on('change','.descriptions',function(event) { 
    event.target.focus(); 
    event.target.setSelectionRange(0,3); 
}); 

当我手动更改此输入文本字段中的文本,该脚本工作。但是,当我使用Jquery和链接触发事件时,它不会:

<a onMouseDown="javascript:$('.descriptions').val('test text'); 
$('.descriptions').trigger('change');">update input</a> 

我以为它们几乎是一样的!我注意到,如果我将event.target记录到控制台,输出结果不完全相同。

有什么想法?

回答

1

你没一起显示所有的代码,但是这个代码你是什么后:

$('.descriptions').on('change', function(event){ 
 
    event.target.focus(); 
 
    event.target.setSelectionRange(0,3); 
 
}); 
 

 
$('#lnkChange').on("click", function(){ 
 
    $('.descriptions').val("changed text"); 
 
    $('.descriptions').trigger("change"); 
 
}); 
 

 
$('#btn').on("click", function(){ 
 
    $('.descriptions').trigger("change"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input class="descriptions"> 
 
<a href="#" id="lnkChange">Change text of input</a> 
 
<input type="button" id="btn" value="Trigger Change Event Only">

+0

谢谢。这确实在片段中工作,但不在我的网站上。原来问题是,当输入值以编程方式更新时,您必须等待片刻才能选择其中的文本。我使用'window.setTimeout(function(){)'暂停节拍,它工作。 – Hank

+0

@Hank'setTimeout()'根本不需要。我已经更新了我的答案,以便在您的问题中显示超链接,尽管我已将所有JavaScript和JQuery从HTML中移出(因为它们应该是这样)。 –

+0

再次感谢ScottMarcus。我认为在我的实际网站上的事情很复杂,因为有成百上千的这些条目,而且不依赖于特定的ID或索引,事情必须混淆在我试图用来访问和配对的广泛类定义中链接和输入。我会报告更多细节。 – Hank