最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - jQuery .focus() and .blur() not working in Chrome or Safari - Stack Overflow

programmeradmin3浏览0评论

I am creating a survey form that needs to have each question and set of answers highlighted (by changing the background color) when the user focuses on them. .focus() and .blur() both work in Firefox and IE, but not entirely in Safari and Chrome. I also tried .focusin() and .focusout() with the same results. EDIT: Clicking does not fire the focus event, but tabbing through the input fields does. I say not entirely because it works for text inputs, select inputs and textarea inputs; but not radio and checkbox inputs.

$(document).ready(function()
 {
    $("form li").focusin(function()
  {
   $(this).addClass("over");
  }).focusout(function()
  {
     $(this).removeClass("over");
  });
 });

This is being applied to blocks of html similar to this:

<li>
    <label for="webmail" class="desc">Email</label>
    <input type="text" name="webmail" id="webmail" />
</li>
<li>
    <label for="business" class="desc">Purpose of your Charter Flight:</label>
    <div>
        <span>
            <input type="radio" name="purpose" id="business" class="radio" />
            <label class="choice" for="business">Business</label>
        </span>
        <span>
            <input type="radio" name="purpose" id="pleasure" class="radio" />
            <label class="choice" for="pleasure">Pleasure</label>
        </span>
    </div>
</li>

I tried messing around with toggles, but I am looking for a more elegant solution that doesn't involve using convoluted logic to make it work. Any ideas?

I am creating a survey form that needs to have each question and set of answers highlighted (by changing the background color) when the user focuses on them. .focus() and .blur() both work in Firefox and IE, but not entirely in Safari and Chrome. I also tried .focusin() and .focusout() with the same results. EDIT: Clicking does not fire the focus event, but tabbing through the input fields does. I say not entirely because it works for text inputs, select inputs and textarea inputs; but not radio and checkbox inputs.

$(document).ready(function()
 {
    $("form li").focusin(function()
  {
   $(this).addClass("over");
  }).focusout(function()
  {
     $(this).removeClass("over");
  });
 });

This is being applied to blocks of html similar to this:

<li>
    <label for="webmail" class="desc">Email</label>
    <input type="text" name="webmail" id="webmail" />
</li>
<li>
    <label for="business" class="desc">Purpose of your Charter Flight:</label>
    <div>
        <span>
            <input type="radio" name="purpose" id="business" class="radio" />
            <label class="choice" for="business">Business</label>
        </span>
        <span>
            <input type="radio" name="purpose" id="pleasure" class="radio" />
            <label class="choice" for="pleasure">Pleasure</label>
        </span>
    </div>
</li>

I tried messing around with toggles, but I am looking for a more elegant solution that doesn't involve using convoluted logic to make it work. Any ideas?

Share Improve this question edited Jul 27, 2010 at 22:01 Eric asked Jul 27, 2010 at 21:54 EricEric 1351 gold badge1 silver badge6 bronze badges 1
  • If blur() isn't working, try creating a dummy input element, sticking it somewhere off the page, and calling focus() on it. – Warty Commented Jul 27, 2010 at 22:01
Add a ment  | 

3 Answers 3

Reset to default 3

I also came across this problem a long time ago, and oddly enough it was a radio button giving me the grief.

Try using jQuery.change() instead, here's a working example from that problem I had

$("input#zendesk-dropbox-askedbefore, input#zendesk-dropbox-newhere").change(function() {
    $("label#zendesk-dropbox-label-askedbefore, label#zendesk-dropbox-label-newhere").toggleClass('zendesk-dropbox-label-highlight');
});

In case it's unclear from my crazy use of ID names, input#zendesk-dropbox-askedbefore & input#zendesk-dropbox-newhere are both radio buttons.

I thought about it on the drive home last night and figured it out on my own, it may not be the most elegant solution, but it certainly works.

$(document).ready(function()
    {
       $("textarea, input, select, .radio, .checkbox").click(function()
        {
            $("form li.over").toggleClass("over");
            $(this).parents("li").toggleClass("over");
        });
    });

Thanks anyway!

// In js area write following method
$('#chkRikin').focus(function() {
alert('Say Hi Rikin');
});


// in html area write following code anenter code hered test it your self
<input type="checkbox" onclick="this.focus()" onblur="yourMethod()" />

it works in google crom
发布评论

评论列表(0)

  1. 暂无评论