jQuery专注于数组模糊

Posted

技术标签:

【中文标题】jQuery专注于数组模糊【英文标题】:jQuery on focus on blur with an array 【发布时间】:2017-12-22 21:39:56 【问题描述】:

** 这不是任何 IE9 占位符问题的重复。原因是,我使用的旧 JSP 框架 WebWork 不支持 html 中的占位符。 **

我想做的事

我想在字段中显示一个值作为placeholder 文本。但是如果用户开始输入,占位符文本应该会消失。

问题

如果我输入内容并在外部单击,我输入的内容将被占位符文本替换。我想阻止它被替换。如果输入为空,则显示占位符文本,如果输入有值,则不替换文本。

限制

由于某些技术原因,我也不能使用placeholder 属性。 (老框架,需要支持IE9)。

希望大家帮忙。

var inputTextIDs = [
    [".hotelLocaiton", "Location"],
    ["#agentTransfersSearchForm_filter_transfersName", "Location2"]
];

$.each(inputTextIDs, function(i, v) 
    //$('input'+inputTextIDs[i][0]).val(inputTextIDs[i][1]);
    $('input' + inputTextIDs[i][0]).on('change', function() 
        var inputValue = $.trim($('input' + inputTextIDs[i][0]).val());
        $('input' + inputTextIDs[i][0]).val(inputTextIDs[i][1]);
        $('input' + inputTextIDs[i][0]).on('focus', function() 
            $('input' + inputTextIDs[i][0]).val('');
        ).on('blur', function() 
            $('input' + inputTextIDs[i][0]).val(inputTextIDs[i][1]);
        );
    );
);

【问题讨论】:

我认为我们不能停止在键入时替换占位符! @nasty 你可以根据需要查看我的答案 Placeholder in IE9的可能重复 还有:***.com/questions/15020826/… 和许多其他人。 @freedomn-m 不,这不是重复。我不能使用那个占位符插件,因为我使用的是 WebWork,一个旧的 JSP 框架,这有插件的复杂性。 【参考方案1】:

var inputTextIDs = [
  [".hotelLocaiton", "Location"],
  ["#agentTransfersSearchForm_filter_transfersName", "Location2"]

];

$.each(inputTextIDs, function(i, v) 

  $('input' + inputTextIDs[i][0]).on('focus', function() 
    if ($('input' + inputTextIDs[i][0]).val() == inputTextIDs[i][1]) 
      $('input' + inputTextIDs[i][0]).val('');
    
  ).on('blur', function() 
    if (!$('input' + inputTextIDs[i][0]).val()) 
      $('input' + inputTextIDs[i][0]).val(inputTextIDs[i][1]);
    
  );


  $('input' + inputTextIDs[i][0]).val(inputTextIDs[i][1]);

);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input class="hotelLocaiton" />
<input id="agentTransfersSearchForm_filter_transfersName" />

【讨论】:

@nasty 你到底需要实现什么? 我想在字段中显示占位符,但如果您输入一些内容,它不会用占位符替换您所写的内容 @nasty 所以初始输入字段将带有占位符,然后如果您写一些内容,它将删除占位符值等等,对吗? 让我们continue this discussion in chat。【参考方案2】:

你可以使用focusinfocusout

var inputTextIDs = [
  [".hotelLocaiton", "Location"],
  ["#agentTransfersSearchForm_filter_transfersName", "Location2"]
];

$.each(inputTextIDs, function(i, v) 
  $(v[0]).val(v[1]).focusin(function() 
    if ($(this).val() == v[1]) 
      $(this).val('');
    
  ).focusout(function() 
    if ($(this).val() == '') 
      $(this).val(v[1]);
    
  )
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input class="hotelLocaiton" />
<input id="agentTransfersSearchForm_filter_transfersName" />

【讨论】:

当我在输入消息后单击输入字段时,这仍然会清除文本。所以,1)输入一些东西,然后在输入字段内单击。这应该清除输入字段 非常感谢。这真太了不起了。但是对于密码字段,这显示 *** 而不是文本“密码”.. 是否可以修复? 好吧,如果类型是password,那就不可能了。是的,可以编写一些努力和代码行来调整并使其以某种方式工作,但前提是它确实值得。否则,我建议不要这样做,因为它可能不支持所有浏览器。【参考方案3】:

您可以根据需要尝试此操作,它也适用于密码字段。

var inputTextIDs = [
  [".hotelLocaiton", "Location"],
  ["#agentTransfersSearchForm_filter_transfersName", "Location2"]

];

$.each(inputTextIDs, function(i, v) 
  var placeholderValue = inputTextIDs[i][1];
  $('input' + inputTextIDs[i][0]).val(placeholderValue);
  
  if($('input' + inputTextIDs[i][0]).attr("type")=="password")
    $('input' + inputTextIDs[i][0]).attr("original-type","password");
    $('input' + inputTextIDs[i][0]).attr("type","text");
  
  
  $('input' + inputTextIDs[i][0]).on('change', function()       
    if ($(this).val().trim() == "") 
      $(this).val(placeholderValue);
      
      if($(this).attr("type")=="password")
        $(this).attr("type","text");
      
    
    else
       if($(this).attr("original-type")=="password")
        $(this).attr("type","password");
      
    
  );

  $('input' + inputTextIDs[i][0]).on('focus', function() 
    if ($(this).val().trim() == placeholderValue) 
      $(this).val('');
      
      if($(this).attr("original-type")=="password")
        $(this).attr("type","password");
      
       
  ).on('blur', function() 
    if ($(this).val().trim() == "") 
      $(this).val(placeholderValue);
      
      if($(this).attr("type")=="password")
        $(this).attr("type","text");
      
    
  );

);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input class="hotelLocaiton" />
<input id="agentTransfersSearchForm_filter_transfersName" type="password" />

【讨论】:

非常感谢。这真太了不起了。但是对于密码字段,这显示 *** 而不是文本“密码”.. 是否可以修复? 我已经更新了答案,使其也适用于密码。 谢谢。但是当我单击密码输入字段时,它会将其type 更改为文本。然后当我点击外面时它再次变成密码 你可以再次coden-p。当您单击密码输入字段时,它将保留为密码字段。当在外部单击时检查值,如果值存在而不是占位符,则它将保持为密码类型,否则将更改为文本类型。你可以检查这个screencast.com/t/Kc2nkdvv

以上是关于jQuery专注于数组模糊的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:如何专注于输入文本字段,使光标位于文本的末尾?

专注于 jQuery Mobile pageshow 事件不呈现

JavaScript jquery - 专注于页面上的第一个文本输入字段

可拖动的 jquery ui 触摸防止专注于 Chrome 上的输入

专注于 jquery UI 选项卡的选项卡

Sketch——让你专注于你最擅长的事:设计