gpt4 book ai didi

javascript - IE7 问题与我的 jQuery [单击并更改功能]

转载 作者:行者123 更新时间:2023-11-29 20:21:40 25 4
gpt4 key购买 nike

我有以下代码片段。基本上我想要做的是在第一次点击功能中循环遍历缓存的 JSON 数据并显示该 ID 存在的任何值。在第二个更改函数中,每当其中一个元素更改值时(即是到否,反之亦然),我都会捕获。

这些元素都是通过我从网络服务接收到的 JSON 数据动态生成的。据我了解,这就是我必须使用 .live 功能的原因。

在 Firefox 中,一切都按预期工作(当然)。但是,在 IE7 中却没有。在 IE7 中,如果我选择一个单选按钮,该按钮显示来自点击功能的警报,那么它也会添加到已更改功能的数组中。但是,如果单选按钮在点击功能中没有执行任何操作,则不会为更改添加数组。

当我查看这段代码时,我想我可以将这两个功能组合在一起,但是,现在我只想让它在 IE7 中工作。

$(document).ready(function () {
//This function is run whenever a 'radio button' is selected.
//It then goes into the CPItemMetaInfoList in the cached JSON data
//($.myglobals) and checks to see if there are currently any
//scripts to display.

$("input:radio").live("click", function () {
var index = parseInt(this.name.split(':')[0]);
for (i = 0; i <= $.myglobals.result.length - 1; i++) {
if ($.myglobals.result[i].CPItemMetaInfoList.length > 0) {
for (j = 0; j <= $.myglobals.result[i].CPItemMetaInfoList.length - 1; j++) {
if (index == $.myglobals.result[i].QuestionId) {
alert($.myglobals.result[i].CPItemMetaInfoList[j].KeyStringValue);
return;
}
}
}
}
});
});

$(document).ready(function () {
var blnCheck = false;
//Checks to see if values have changed.
//If a value has been changed then the isDirty array gets populated.
//This array is used when the questionSubmit button is clickeds
$('input').live('change', function () {
blnCheck = false;

for (i = 0; i <= isDirty.length - 1; i++) {
if (isDirty[i] == $(this).attr("name")) {
blnCheck = true;
break
}
}


if (blnCheck == false) {
isDirty[arrayCount] = $(this).attr("name");
arrayCount += 1;
alert($(this).attr("name"));
}
});

$('textarea').live('change', function () {
blnCheck = false;
for (i = 0; i <= isDirty.length - 1; i++) {
if (isDirty[i] == $(this).attr("id")) {
blnCheck = true;
break
}
}

if (blnCheck == false) {
isDirty[arrayCount] = $(this).attr("id");
arrayCount += 1;
//alert($(this).attr("name"));
}
});
});

更新:

我必须将这段代码移到点击函数中:

   blnCheck = false;
for (i = 0; i <= isDirty.length - 1; i++) {
if (isDirty[i] == $(this).attr("name")) {
blnCheck = true;
break
}
}


if (blnCheck == false) {
isDirty[arrayCount] = $(this).attr("name");
arrayCount += 1;
alert($(this).attr("name"));
}

像这样:

     $(document).ready(function () {
//This function is run whenever a 'radio button' is selected.
//It then goes into the CPItemMetaInfoList in the cached JSON data
//($.myglobals) and checks to see if there are currently any
//scripts to display.

$("input:radio").live("click", function () {
var index = parseInt(this.name.split(':')[0]);
for (i = 0; i <= $.myglobals.result.length - 1; i++) {
if ($.myglobals.result[i].CPItemMetaInfoList.length > 0) {
for (j = 0; j <= $.myglobals.result[i].CPItemMetaInfoList.length - 1; j++) {
if (index == $.myglobals.result[i].QuestionId) {
alert($.myglobals.result[i].CPItemMetaInfoList[j].KeyStringValue);
return;
}
}
}
}
blnCheck = false;

for (i = 0; i <= isDirty.length - 1; i++) {
if (isDirty[i] == $(this).attr("name")) {
blnCheck = true;
break
}
}

if (blnCheck == false) {
isDirty[arrayCount] = $(this).attr("name");
arrayCount += 1;
}

});
});

但是……

我不得不让更改功能保持不变。从我的测试中,我发现 .click 功能适用于 IE7 的单选按钮和复选框元素,但 .change 功能适用于 IE7 和 FF 中的文本框和文本区域,以及单选按钮和复选框元素的原始功能。

这个真的很乱。感谢@Patricia 查看它。这里的建议确实引导我找到了这个解决方案。我将不回答这个问题,因为我想知道是否没有更清洁的解决方案。

最佳答案

事实:单选按钮和复选框上的 change 事件只会在 focus 丢失时触发(即当 blur 事件即将结束时)发生)。要实现“预期”行为,您确实需要 Hook click 事件。

你基本上是想改变

$('input').live('change', function() {
// Code.
});

$('input:radio').live('click', functionName);
$('input:not(:radio)').live('change', functionName);

function functionName() {
// Code.
}

(不过,如果您的表单中有复选框,我也会使用 :checkbox 选择器考虑复选框,您希望将它们视为单选按钮)

关于javascript - IE7 问题与我的 jQuery [单击并更改功能],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3720956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com