捕获 asp.net 文本框上的鼠标点击
Capturing mouseclick on an asp.net Textbox
我有一个弹出框,允许用户输入简短的(50 个字符)注释。我需要做的是弄清楚如何防止用户使用鼠标右键单击 copy/pasting 注释。
我在所有 events available 中查找了一个文本框,onkeyup 和 onkeydown 不在此列表中,但它们确实有效。
我有以下 JavaScript 可以捕获击键:
<!--//**********************************
// Comment Character Count
//********************************** -->
<script type="text/javascript">
function textCounter(field, countfield, maxlimit) {
if (field.value.length > maxlimit)
field.value = field.value.substring(0, maxlimit);
else
countfield.value = maxlimit - field.value.length;
}
</script>
然后这个文本框在按下某个键时调用上述函数:
<asp:TextBox ID="txtCommentBox" TextMode="MultiLine" CssClass="textbox" Wrap="True"
Height="70px" Width="270px" Font-Size="Small" Rows="3" runat="server"
onkeyup="textCounter(this, this.form.remLen, 50);"
onkeydown="textCounter(this, this.form.remLen, 50);" />
一切都很好,除了当有人右键单击并选择 "Paste" 时,它会绕过检查,因为没有按下任何键。关于如何捕获它的任何想法?是否有我可以调用的未记录的 onmouseclick 事件?
使用TextBox.MaxLength
属性。即使在粘贴文本时,它也会阻止添加其他字符。您还可以添加 asp.net 自定义验证器以确保用户没有在浏览器编辑器中更改您 html。
<asp:TextBox ID="txtCommentBox" TextMode="MultiLine" CssClass="textbox" Wrap="True"
Height="70px" Width="270px" Font-Size="Small" Rows="3" runat="server" MaxLength="50"/>
首先,向您的文本框添加一个 onpaste
事件:
<asp:TextBox ID="txtCommentBox" TextMode="MultiLine" CssClass="textbox" Wrap="True"
Height="70px" Width="270px" Font-Size="Small" Rows="3" runat="server"
onkeyup="textCounter(this, this.form.remLen, 50);"
onkeydown="textCounter(this, this.form.remLen, 50);"
onpaste="textCounter(this, this.form.remLen, 50);" />
接下来,调整 Fabrício Matté's 解决方案来处理 onpaste
触发和 value
填充之间的时间差异:
function textCounter(field, countfield, maxlimit) {
setTimeout(function () {
if (field.value.length > maxlimit)
field.value = field.value.substring(0, maxlimit);
else
countfield.value = maxlimit - field.value.length;
}, 0);
}
我有一个弹出框,允许用户输入简短的(50 个字符)注释。我需要做的是弄清楚如何防止用户使用鼠标右键单击 copy/pasting 注释。
我在所有 events available 中查找了一个文本框,onkeyup 和 onkeydown 不在此列表中,但它们确实有效。
我有以下 JavaScript 可以捕获击键:
<!--//**********************************
// Comment Character Count
//********************************** -->
<script type="text/javascript">
function textCounter(field, countfield, maxlimit) {
if (field.value.length > maxlimit)
field.value = field.value.substring(0, maxlimit);
else
countfield.value = maxlimit - field.value.length;
}
</script>
然后这个文本框在按下某个键时调用上述函数:
<asp:TextBox ID="txtCommentBox" TextMode="MultiLine" CssClass="textbox" Wrap="True"
Height="70px" Width="270px" Font-Size="Small" Rows="3" runat="server"
onkeyup="textCounter(this, this.form.remLen, 50);"
onkeydown="textCounter(this, this.form.remLen, 50);" />
一切都很好,除了当有人右键单击并选择 "Paste" 时,它会绕过检查,因为没有按下任何键。关于如何捕获它的任何想法?是否有我可以调用的未记录的 onmouseclick 事件?
使用TextBox.MaxLength
属性。即使在粘贴文本时,它也会阻止添加其他字符。您还可以添加 asp.net 自定义验证器以确保用户没有在浏览器编辑器中更改您 html。
<asp:TextBox ID="txtCommentBox" TextMode="MultiLine" CssClass="textbox" Wrap="True"
Height="70px" Width="270px" Font-Size="Small" Rows="3" runat="server" MaxLength="50"/>
首先,向您的文本框添加一个 onpaste
事件:
<asp:TextBox ID="txtCommentBox" TextMode="MultiLine" CssClass="textbox" Wrap="True"
Height="70px" Width="270px" Font-Size="Small" Rows="3" runat="server"
onkeyup="textCounter(this, this.form.remLen, 50);"
onkeydown="textCounter(this, this.form.remLen, 50);"
onpaste="textCounter(this, this.form.remLen, 50);" />
接下来,调整 Fabrício Matté's 解决方案来处理 onpaste
触发和 value
填充之间的时间差异:
function textCounter(field, countfield, maxlimit) {
setTimeout(function () {
if (field.value.length > maxlimit)
field.value = field.value.substring(0, maxlimit);
else
countfield.value = maxlimit - field.value.length;
}, 0);
}