Javascript JS设置属性(值)在DOM中不返回

Javascript JS设置属性(值)在DOM中不返回,javascript,jquery,dom,websocket,Javascript,Jquery,Dom,Websocket,我使用WebSocketd发送数据并从STDOUT检索数据,然后使用JS访问消息: var ws = new WebSocket('ws://ip-address:8081/'); ws.onopen = function() { document.getElementById("phone").style.background= '#cfc'; }; ws.onclose = function() { document.getEle

我使用WebSocketd发送数据并从STDOUT检索数据,然后使用JS访问消息:

   var ws = new WebSocket('ws://ip-address:8081/');
   ws.onopen = function() {
        document.getElementById("phone").style.background= '#cfc';
      };
   ws.onclose = function() {
        document.getElementById("phone").style.background= '#fcc';
   };
   ws.onmessage = function(event) {
          $('#phone').attr('value',  event.data);
   };
它工作得很好,然后我尝试了以下方法来测试设置websocket连接后phone的值是否会发生变化

var max = 10;
$('#phone').focus(function(e)
{  
  if ($(this).val().length > max) 
  { alert('action fired') 
  }
})
.keyup(function(e){  
  if ($(this).val().length > max) { 
      alert('action fired') 
  }
});

但在我手动输入文本之前,这是不起作用的。据我所知,以编程方式设置输入值不会使其聚焦,也不会触发要触发的keyup事件。但是,您可以在WebSocket发送消息后手动触发focus事件或keyup事件。这可能就是你想要的

var ws = new WebSocket('ws://ip-address:8081/');
ws.onopen = function() {
     document.getElementById("phone").style.background= '#cfc';
};
ws.onclose = function() {
     document.getElementById("phone").style.background= '#fcc';
};
ws.onmessage = function(event) {
       $('#phone').val(event.data);
       $("#phone").focus(); //we now focus the input which should fire your focus event listener
};

如果您使用Javascript设置输入值,那么keyup和focus事件自然不会触发。您需要使用Javascript来关注输入

改变

ws.onmessage = function(event) {
      $('#phone').attr('value',  event.data);
};

邮寄 var max=10; $'sendMessage'。单击函数E{ //模拟发送的消息 $'phone'.attr'value',$'message'.val; $‘电话’。焦点; }; $“消息”。按键功能{ ife.keyCode==13{ //模拟发送的消息 $'phone'.attr'value',$'message'.val; $‘电话’。焦点; } }; $'phone'.focusfunction { 如果$this.val.length>max {console.log'action fired' } } .keyupfunction{ 如果$this.val.length>max{ console.log'action fired' } };


旁注,$'phone'.valevent.data是两者都使用的valI的setter版本,同样的结果也是为了确保。当你说它能完美工作时,意味着你在聚焦之前在输入框中看到了值?好吧,根据定义,如果你以编程方式分配输入值,那么不会触发键控事件,也不会触发聚焦。您可以手动发送一个focus/keyup事件,该事件应该可以工作。是的,我在focus之前的输入框中看到了该值
ws.onmessage = function(event) {
      $('#phone').attr('value',  event.data);
      $('#phone').focus();
};