如何实现搜索表单粘贴文本时触发数据加载功能
解决方案
当然可以实现,问题在于你当前只绑定了keyup事件,而粘贴文本(不管是右键粘贴还是快捷键粘贴)都不会触发这个事件,所以得调整事件监听逻辑。
推荐方案:使用input事件(覆盖所有文本变更场景)
input事件会在输入框内容发生任何变化时触发,包括键盘输入、粘贴文本、拖拽文本、输入法输入完成等,是处理这类场景最省心的选择。
修改后的代码如下:
<input type="text" name="search_text" id="search_text" placeholder="" class="fontAwesome" /> <div id="result"></div> <script> $(document).ready(function () { load_data(); function load_data(query) { $.ajax({ url: "oSearch.php", method: "POST", data: { query: query }, success: function (data) { $("#result").html(data); }, }); } // 把keyup换成input事件 $("#search_text").on("input", function () { var search = $(this).val(); if (search != "") { load_data(search); } else { load_data(); } }); }); </script>
备选方案:额外监听paste事件
如果你想保留keyup同时支持粘贴触发,也可以同时绑定paste事件,不过需要注意粘贴后要稍等获取到最新的输入值(因为paste事件触发时,内容还没完全粘贴到输入框):
<input type="text" name="search_text" id="search_text" placeholder="" class="fontAwesome" /> <div id="result"></div> <script> $(document).ready(function () { load_data(); function load_data(query) { $.ajax({ url: "oSearch.php", method: "POST", data: { query: query }, success: function (data) { $("#result").html(data); }, }); } // 抽离处理逻辑成单独函数 function handleSearch() { var search = $(this).val(); if (search != "") { load_data(search); } else { load_data(); } } // 绑定keyup和paste事件 $("#search_text").on("keyup paste", function (event) { // paste事件需要延迟一点获取值,确保内容已粘贴完成 if (event.type === "paste") { setTimeout(() => handleSearch.call(this), 10); } else { handleSearch.call(this); } }); }); </script>
显然第一种方案更简洁可靠,推荐使用input事件来覆盖所有文本变更的场景。
内容的提问来源于stack exchange,提问作者jigga
相关产品推荐
相关产品推荐

