【问题标题】:$(this).click() internet explorer issue$(this).click() Internet Explorer 问题
【发布时间】:2013-01-22 16:20:57
【问题描述】:

此代码/标记与 php 脚本一起呈现一个多选输入,其中填充了选项设置为 文件通过 php 脚本。目标是当用户单击一个选项时,读取文本文件并将其输出到 div $("#txtbx")。 这在 Mozilla firefox 中按计划工作,但是 ie9 什么都不做,没有错误没有输出。 正如您从 cmets 中看到的那样,我已经找到了问题的代码。这不是我最初想到的 .each() 问题,也不是选择器问题(我直接按类引用了它:见评论)。也不是 $(this) 我也测试过......它似乎是附加到 $(this) 的事件或事件本身。输出的去向无关紧要,因为它不会超过 $(this).click(f)。知道这里发生了什么吗?

<div id="txtbx">
</div>

<select id="REFselect" size="1">
<option class="REFoptions" value="./TXT/css.txt">css.txt</option>
<option class="REFoptions" value="./TXT/dns.txt">dns.txt</option>
</select>

$("#REFselect option").each(function () {
    $(this).click(function(){
        alert("test")
        /*
        $("#txtbx").load($(this).val(),function(responseTxt,statusTxt,xhr){
            $(this).html("<pre>"+responseTxt+"</pre>");
            if(statusTxt=="success")
              alert("External content loaded successfully!");
            if(statusTxt=="error")
              alert("Error: "+xhr.status+": "+xhr.statusText);

        });
        */
    });
});

这是工作代码,我是该网站的新手,所以我要感谢大家的回答,他们非常好。我不知道如何授予适当的信用,我正在研究。 我也很想知道为什么旧代码在 FF 而不是 IE 中工作。

$("#REFselect").change(function(){
        var select = $(this).val();

        $("#txtbx").load(select,function(responseTxt,statusTxt,xhr){
            $(this).html("<pre>"+responseTxt+"</pre>");
            if(statusTxt=="success")
              alert("External content loaded successfully!");
            if(statusTxt=="error")
              alert("Error: "+xhr.status+": "+xhr.statusText);  
        });
});

【问题讨论】:

  • 我相信你在load回调中的this将不再是被点击的元素,你需要将它存储在一个变量中,并在load回调中使用该变量。跨度>

标签: javascript jquery internet-explorer-9


【解决方案1】:

您将.click 处理程序绑定到&lt;option&gt; 元素(没有要处理的click 事件)。

尝试将其设置为&lt;select&gt; 元素的.change 事件。

$("#REFselect").change(function (e) {
    alert("test")
    $("#txtbx").load($(this).val(), function (responseTxt, statusTxt, xhr) {
        $(this).html("<pre>" + responseTxt + "</pre>");
        if (statusTxt == "success") {
            alert("External content loaded successfully!");
        }
        if (statusTxt == "error") {
            alert("Error: " + xhr.status + ": " + xhr.statusText);
        }
    });
});

【讨论】:

  • 还添加说明为什么它在 mozilla 上运行以及为什么不在 IE 上运行?
  • @AspiringAqib:我会,但我不明白为什么它会在 FF 中工作(除了事件冒泡,但处理程序没有绑定到选择,所以......我不知道)。
  • 我很乐意 +1 一个充分解释为什么 OP 的代码在 FF 中工作的答案。 :)
  • 我不知道如何结束问题、发布工作代码、奖励信用等... +1 答案?我很想知道为什么代码在 FF 中有效
【解决方案2】:
$("#REFselect").on("change", function() {
   $("#txtbx").load($(this).val(),function(responseTxt,statusTxt,xhr){
        $(this).html("<pre>"+responseTxt+"</pre>");
        if(statusTxt=="success")
          alert("External content loaded successfully!");
        if(statusTxt=="error")
          alert("Error: "+xhr.status+": "+xhr.statusText);

    });
});

您可以使用.on() 将事件绑定到选择标签的所有选项上!并按照 bfavaretto 的建议更改事件。

【讨论】:

  • 是的,现在不同了。不过,我建议我的答案采用不同的方法,因为我不确定如何跨浏览器处理对选项元素(以及选项元素上的 .val())的点击。
  • 只是 FIY:使用$('selector').click(callback)$('selector').on('click', callback) 的快捷方式。它没有被弃用。已弃用的是 .live,应将其替换为不同形式的 .on$('ancestor').on('click', 'selector', callback)change 和所有其他事件也是如此。
  • jbaby 暗示它,皮特拼写出来,显然在 ie9 中(因为它在 mozilla 上工作)选项上没有点击事件。另外,我接受了 bfavareto 的建议,将 $(this).val() 放入变量中并将其传递给 load() (我假设 IE9 现在认为 $(this) 指向 $("#txtbx")。仍然很困惑至于为什么 Mozilla 会有不同的看法。我是这个论坛的新手,如何发布工作代码和奖励积分?
【解决方案3】:

我认为这是内部的$(this)(应该是&lt;option&gt; 元素)。尝试使用change 事件直接从&lt;select&gt; 获取值:

$("#REFselect").change(function(){
     alert("test");
     $("#txtbx").load($(this).val(),function(responseTxt,statusTxt,xhr){
         $(this).html("<pre>"+responseTxt+"</pre>");
         if(statusTxt=="success")
             alert("External content loaded successfully!");
         if(statusTxt=="error")
             alert("Error: "+xhr.status+": "+xhr.statusText);

     });
});

【讨论】:

  • 我认为您不能将事件绑定到 option 元素。此外,这里不需要each,因为.change 无论如何都会绑定到集合中的所有元素。
  • 感谢您指出这一点。我回答得太快了,没有太注意我的复制/粘贴。其目的正是避免直接针对选项元素。现已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多