de l'événement.preventDefault() ne fonctionne pas
j'ai cette ligne de code dans mon point de vue à l'aide de la Telerik Grille:
columns.Bound(o => o.URI).Width(10).Sortable(false)
.ClientTemplate("<A class='btnGrid' id=source<#= ID #> onclick=GridSelection.addItem('<#= ID #>') >Add</A>").Title("").Width(50);
la GridSelection addItem et disableSelected des fonctions JS codes:
GridSelection = {
addItem: function (value) {
var anchorOption = $("a[id=source" + value + "]");
anchorOption.click(function (e) { //variable name changed from "event"
e.preventDefault();
return false; //as suggested by mr. Hamdi
});
anchorOption.fadeTo("slow", .5);
GridSelection.disableSelected(anchorOption, true);
var data = $("#GridSource").data('tGrid').data;
var selectedObject;
for (var item in data) {
if (data[item].ID == value) {
selectedObject = data[item];
break;
}
}
var grid = $("#GridSelected").data('tGrid');
var newData = $("#GridSelected").data('tGrid').dataSource._data;
newData.push(selectedObject);
grid.dataBind(newData);
grid.sort("");
anchorOption.fadeTo("slow", .5);
},
disableSelected: function (element, disable) {
//false on IEs 6, 7 and 8
if (!$.support.leadingWhitespace) {
if (disable) {
$(element).attr('disabled', 'disabled');
} else {
$(element).removeAttr('disabled');
}
}
},
//other GridSelection subfunctions here...
Que je lance le MVC3 web app dans IE, il fonctionne bien en raison de la GridSelection.disableSelected fonction, mais dans Chrome et Mozilla Firefox, le event.preventDefault();
ne fonctionne pas. L'ancre de lien ajoute encore à l'élément de données même après que l'utilisateur a déjà ajouté qu'il n'.
Est-il possible d'avoir le preventDefault
méthode à l'intérieur de la GridSelection.addItem
fonction qui l'empêchait?
L'attribut est empêchée par la preventDefault
, est-il le href ou est-ce la onclick?
Quoi de mal à cela?
Comment puis-je corriger ce bug?
Quelqu'un qui peut m'aider?
anchorOption.fadeTo("slow", .5);
travail?C'est aussi l'une de mes impulsions. J'ai ici un des Outils du Développeur de l'app que j'utilise dans le débogage de mon application. J'ai ajouté des points d'arrêt sur les lignes de code des scripts pour savoir si elle passe par ces lignes et il le fait.
veuillez voir mes ajouté des questions dans mon post édité. merci
Avez-vous vérifié Console d'Erreur dans Mozilla ? Est-il une erreur? Pouvez-vous ajouter de la ligne d'alerte avant
e.preventDefault();
pour s'assurer que la fonction est appelée.Avez-vous oublié d'ajouter un point-virgule après
return false
. Il ne devrait pas donner d'erreur, mais la peine d'essayer.OriginalL'auteur ideAvi | 2012-02-24
Vous devez vous connecter pour publier un commentaire.
Le balisage de votre lien a une ligne cliquez sur gestionnaire et pas de
href
:Si c'est le
GridSelection.verify()
que vous essayez de vous empêcher de vous devriez noter que:e.preventDefault()
n'arrête pas d'autres gestionnaires de course, il s'arrête l'action par défaut pour les événement qui a un lien pour accéder à l'url spécifiée dans lehref
attribut. Et vous ne spécifiez pas unhref
.Si vous voulez avoir plusieurs gestionnaires pour le même événement sur le même élément que vous devez les attribuer tous avec jQuery dans l'ordre que vous voulez être appelés, et ensuite utiliser le
événement.stopImmediatePropagation()
méthode au sein de l'un des gestionnaires si vous voulez arrêter le reste de leur exécution.Je ne sais pas comment l'adapter que dans le code que vous avez indiqué étant donné que vous n'avez pas de montrer une partie du code que vous voulez éviter, mais le principe général est:
Ayant dit que, si le
.verify()
les appels de fonction de votre.addItem()
fonction et il est de votre intention d'empêcher la avenir cliquez sur les événements de travailler sur le même lien, parce que le premier clic doit vérifier/ajouter et puis vous ne voulez pas être en mesure d'ajouter de nouveau, puis au sein de votre.addItem()
fonction de faire quelque chose comme ceci:preventDefault()
? dois-je le mettre à l'intérieur de la.addItem()
encore? ou dois-je le mettre à l'intérieur un autre gestionnaire d'événement à l'extérieur de la.addItem()
?Avec la version mise à jour de la question, je dirais que vous ne voulez pas
preventDefault()
oustopImmediatePropagation()
à tous, vous ne devriez pas être la création d'unclick
de gestionnaire à l'intérieur deaddItem()
comme vous ne le font actuellement car cela ne va pas aider. Essayez le code à partir de la fin de ma réponse et de voir ce qui se passe: l'idée consiste à "éteindre" le existant cliquez sur gestionnaire qui a été défini avec la ligneonclick
attribut dans votre code html.OriginalL'auteur nnnnnn
Avez-vous essayé d'ajouter
return false;
au lieu deevent.preventDefault();
return false;
déclaration aprèsevent.preventDefault();
. Vous n'avez pas besoin de supprimerevent.preventDefault();
Merci, j'ai essayé de l'ajouter à mon code, mais quand même, ça ne change rien.
C'est vraiment bizarre. Je pose le même problème avant et return false; a fonctionné pour moi.
veuillez voir mon post mis à jour. J'ai ajouté quelques questions qui me dérange, peut-être que vous pourriez m'aider à y répondre.
OriginalL'auteur Hamdi
Avez-vous essayé de changer le cas de la variable? appelez-moi fou, mais je me souviens d'avoir des problèmes juste essayer
function(e) {e.preventDefault();}
et voir ce qui se passeoui. Merci mais c'était le premier nom que j'ai utilisé pour le cas de la variable et Il ne marche pas encore.
OriginalL'auteur Mike L.
Si l'ancre a une
id
utiliser le sélecteur d'id au lieu de l'utiliser comme sélecteur d'attributs.Changement
À
Je ne dis pas que c'est la question, mais vous pouvez essayer de changer cela.
Mise à jour:
event.preventDefault()
arrête le navigateur de suivre le lien mis enhref
attribut de l'élément d'ancrage. Il ne permettra pas de prévenir ou d'arrêter laclick
événement.Vérifier mon udpate.
OriginalL'auteur ShankarSangoli