0

我已经用谷歌搜索了大约 2 个小时来解决以下问题(包括其他 Stackoverflow 问题):

<script type="text/javascript">
    jQuery(document).ready(function() {
        jQuery('input[type="radio"]').unbind('click.preset')
        .bind('click.preset', function() {
            doingStuffWith(jQuery(this).val());
        });
    });
</script>

<input type="radio" name="lightType" value="led" />
<input type="radio" name="lightType" value="tube" />

如您所见,我只是试图检索单选按钮组“lightType”的当前值以使用它。这在 Firefox / Safari / Chrome 中就像一个魅力,但 IE8 只返回一个空字符串让我很难过。

我已经尝试了其他问题的一些技巧,例如将更改事件绑定到单选按钮以及通过模糊单击的单选按钮等来强制 IE8 触发它。也许我现在只是失明。

我正在使用最新的 jQuery 版本,并确保没有其他绑定事件干扰。有趣的是,在检索值之前添加一个 alert() 并且 IE 返回当前值:

....
// DOES WORK
alert();
alert(jQuery(this).val()); // alerts e.g. "tube"

// DOESN'T WORK
alert(jQuery(this).val()); // alerts ""

我认为这可能是一个时间问题,但试图用 setTimeout 延迟我的单个警报呼叫并没有帮助。

在此先感谢各位,我希望我只是瞎了眼,没有在 IE8 中发现另一个丑陋的行为。

4

3 回答 3

0

感谢您的回答,但没有一个有效。我不确定这是否是 jQuery 中的错误,或者只是我在特定情况下遇到的问题。似乎 jQuery 正在强制 IE8 在字段真正更改之前触发更改事件。

我终于通过绑定到 blur 事件并将其与 powtacs 结合来解决它:checked 解决方案如下:

<script type="text/javascript">
jQuery(document).ready(function() {

   jQuery('input[type="radio"]').unbind('click.preset')
   .bind('click.preset', function() {
       jQuery(this).blur();
   }

   jQuery('input[type="radio"]').unbind('blur.preset')
   .bind('blur.preset', function() {
        doingStuffWith(jQuery('input[type="radio"]:checked').val());
    });
});
</script>
于 2013-03-28T10:10:47.690 回答
0

我会在回调中使用最新的 jQuery 和选择器on():checked

jQuery(document).ready(function() {
    jQuery('input[type="radio"]').on(function('change blur mousedown click') {
         alert(jQuery('input[type="radio"]:checked').val());
    });
});

实际上这有点棘手,您无法在回调中使用“this”获取选定的单选按钮,您必须使用其他选择器: 我如何知道通过 jQuery 选择了哪个单选按钮?

于 2013-03-21T00:26:04.653 回答
0

IE8 的一个公平选项是在每个单选选项中创建一个类 (!) 并使用它来选择选中的选项。从语义上讲,这有点奇怪,但对我来说效果很好:

HTML

<input type="radio" name="example" class="example_class" value="1"/>#1
<input type="radio" name="example" class="example_class" value="2"/>#2
<input type="radio" name="example" class="example_class" value="3"/>#3

JS

var exampleValue = $('.example_class:checked').val();
于 2017-04-13T18:43:36.423 回答