I would like to have an input text inside a button like this:
<a onclick="reply_click();" class="btn btn-app btn-app-spinner">
<input type="text" disabled class="form-control small-input">
Set Budget
</a>
中停用点击输入
问题是当用户点击输入文本时,会触发reply_click()。我只会在点击a元素(设置出价)时触发它。
我该怎么做?
请参阅jsfiddle
EDITED 如你所见,我想让它看起来与设计中的按钮类似,你可以在JSfiddle中看到
答案 0 :(得分:7)
将input
放在 a
元素中是无效的HTML。来自the spec for a
:
内容模型:
Transparent,但必须没有interactive content后代。
input
是互动内容,因此无法在a
内展示。浏览器可能会选择重写HTML以将input
放在 a
之后,以使其有效。
所以这里的解决方案不是将input
放在a
内。不仅因为HTML不允许它(你可以使用div
上的点击处理程序解决这个问题),而且因为它是非常不寻常的用户体验,对于用户来说这将是不熟悉的并且可能会让人感到不舒服。
话虽如此,如果浏览器没有重新定位input
(或者如果您将a
替换为div
和click
处理程序),则可以停止通过在a
上挂钩click
并使用input
传播到stopPropgation
的事件:
$("a input").on("click", function(e) {
e.stopPropagation();
}):
我不是推荐它。
答案 1 :(得分:3)
从理论上讲,你可以用这样的东西来实现你正在寻找的效果
$(".setBid").click(function(e){
var $input = $(this).find("input[type='text']");
if ($input.is(e.target)
{
//do action
}
})
这是html
<a class="btn btn-app btn-app-spinner setBid">
<input type="text" disabled class="form-control small-input">
Set Budget
</a>
然而,正如@TJ所说这是无效的HTML
答案 2 :(得分:3)
这是无效的HTML!不要那样做!
如果必须,那么只需通过处理输入上的点击停止传播:
function reply_click(e){
alert("clicked!");
}
function input_click(e)
{
e.stopPropagation();
return false;
}
<a onclick="reply_click();" class="btn btn-app btn-app-spinner">
<input type="text" class="form-control small-input" onclick="input_click(event)">
Set Budget
</a>
此代码段不是跨浏览器安全的(在Chrome中测试)。使用jQuery,或处理其他浏览器处理事件的方式。
答案 3 :(得分:2)
你可以这样做:
<div class="btn btn-app btn-app-spinner">
<input type="text" class="form-control small-input">
<a onclick="reply_click();" >
Set Budget
</a>
</div>
在你的小提琴中用你在答案中提供的html替换你的html,你将得到你想要的。
诀窍是将您在a
中的相同类添加到另一个元素中,它们看起来就像是相似的。
然后,如果您希望在用户点击“设置预算”时触发您的操作,请使用<a>
答案 4 :(得分:2)
您不应将FROM tblBookings b
INNER JOIN tblPayments p ON p.ID = (
SELECT TOP 1 ID
FROM tblPayments
WHERE BookingID = b.BookingID
AND DeleteMark != 1
AND PaymentStatusID IN (1,2)
ORDER BY DateOfCreation)
元素包装在链接中。
相反,input
needs a label(用于辅助功能,尤其是屏幕阅读器用户)和用作按钮的东西(下面代码中的真实input
元素)。由于您没有合适的button
元素,因此我使用WAI-ARIA described-by
将输入字段与按钮相关联。
label
答案 5 :(得分:1)
您可以创建div
并在该div上使用click
。这样你就拥有了有效的HTML。
function bid(){
alert('bid');
}
function stop(e){
e.stopPropagation();
}
&#13;
div {
width:200px;
height:60px;
background-color:#f93;
text-align:center;
padding-top:20px;
}
&#13;
<div onclick="bid()">
<input type='text' onclick="stop(event)">
<p>bid</p>
</div>
&#13;