আমি কীভাবে j এর সাথে একটি উপাদান নির্বাচন করতে পারি। (পিরিয়ড) তাদের আইডিতে?


172

নিম্নলিখিত ক্লাস এবং নিয়ামক অ্যাকশন পদ্ধতি দেওয়া:

public School
{
  public Int32 ID { get; set; }
  publig String Name { get; set; }
  public Address Address { get; set; }
}

public class Address
{
  public string Street1 { get; set; }
  public string City { get; set; }
  public String ZipCode { get; set; }
  public String State { get; set; }
  public String Country { get; set; }
}

[Authorize(Roles = "SchoolEditor")]
[AcceptVerbs(HttpVerbs.Post)]
public SchoolResponse Edit(Int32 id, FormCollection form)
{
  School school = GetSchoolFromRepository(id);

  UpdateModel(school, form);

  return new SchoolResponse() { School = school };
}

এবং নিম্নলিখিত ফর্ম:

<form method="post">
  School: <%= Html.TextBox("Name") %><br />
  Street: <%= Html.TextBox("Address.Street") %><br />
  City:  <%= Html.TextBox("Address.City") %><br />
  Zip Code: <%= Html.TextBox("Address.ZipCode") %><br />
  Sate: <select id="Address.State"></select><br />
  Country: <select id="Address.Country"></select><br />
</form>

আমি স্কুল উদাহরণ এবং স্কুলের ঠিকানা সদস্য উভয়কেই আপডেট করতে সক্ষম। এটি বেশ সুন্দর! আপনাকে এএসপি.নেট এমভিসি টিমকে ধন্যবাদ!

তবে, ড্রপ ডাউন তালিকাটি নির্বাচন করতে আমি কীভাবে jQuery ব্যবহার করব যাতে আমি এটি প্রাক পূরণ করতে পারি? আমি বুঝতে পারি যে আমি এই সার্ভারটি পাশেই করতে পারি তবে পৃষ্ঠায় অন্যান্য গতিশীল উপাদান থাকবে যা তালিকাকে প্রভাবিত করে।

আমার এখন পর্যন্ত যা নীচে রয়েছে তা নির্বাচিতরা আইডিগুলির সাথে মেলে না বলে এটি কার্যকর হয় না:

$(function() {
  $.getJSON("/Location/GetCountryList", null, function(data) {
    $("#Address.Country").fillSelect(data);
  });
  $("#Address.Country").change(function() {
    $.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) {
      $("#Address.State").fillSelect(data);
    });
  });
});

উত্তর:


293

গুগল গ্রুপ থেকে :

প্রতিটি বিশেষ চরিত্রের আগে দুটি ব্যাকস্ল্যাশ ব্যবহার করুন।

একটি jQuery নির্বাচক একটি ব্যাকস্ল্যাশ পরবর্তী অক্ষর থেকে পালাতে পারে। তবে আপনার এগুলির দুটি দরকার কারণ ব্যাকস্ল্যাশ জাভাস্ক্রিপ্ট স্ট্রিংয়ের জন্য পালানোর চরিত্র। প্রথম ব্যাকস্ল্যাশ দ্বিতীয়টিকে ছাড়িয়ে যায়, আপনাকে আপনার স্ট্রিংয়ে একটি প্রকৃত ব্যাকস্ল্যাশ দেয় - যা jQuery এর জন্য পরবর্তী অক্ষরটিকে ছাড়িয়ে যায়।

সুতরাং, আমি অনুমান করছি আপনি তাকিয়ে আছেন

$(function() {
  $.getJSON("/Location/GetCountryList", null, function(data) {
    $("#Address\\.Country").fillSelect(data);
  });
  $("#Address\\.Country").change(function() {
    $.getJSON("/Location/GetRegionsForCountry", { country: $(this).val() }, function(data) {
      $("#Address\\.State").fillSelect(data);
    });
  });
});

এছাড়াও সিএসএস স্বরলিপিতে অক্ষর ব্যবহার করা আইডি দ্বারা আমি কীভাবে একটি উপাদান নির্বাচন করব? jQuery FAQ এ।


4
আমি ভাবছি বিকাশকারীকে এটি করার জন্য যৌক্তিকরণটি কী, এটি jQuery এর মধ্যে একটি সাধারণ বংশবৃদ্ধির এই সমস্যার সমাধান করবে বলে মনে হয়, কারণ আইডি এর সাথে পিরিয়ড সহ কোনও ভুল নেই ...
জেসন বুটিং

5
যদি আপনাকে পালাতে না হয়, আপনি কীভাবে আইডি ঠিকানা এবং শ্রেণি স্টেটের সাথে কোনও উপাদানকে জিজ্ঞাসা করবেন (যদি আপনি আইডিটি জানেন তবে আপনি ক্লাসটি নির্দিষ্ট করে বেশি যোগ করছেন না, তবে এটি এখনও বৈধ হওয়া উচিত, আমি মনে)?
বিডুকস

12
সেই কারণে, সিএসএসে নিজেই, আপনাকে অবশ্যই একটি আইডিতে একটি বিন্দু থেকে বাঁচতে হবে। সমস্ত jQuery করছে আপনাকে সিএসএস দ্বারা নির্ধারিত নিয়মগুলি অনুসরণ করতে হবে।
14 এ 11

6
আপনি আইডির পরিবর্তে নাম অনুসারেও নির্বাচন করতে পারেন। উদাহরণস্বরূপ, $ ('[নাম = "ঠিকানা.কাউন্ট্রি"]')
ফানকা

25

আইডিতে স্পেস থাকে তবে আপনি একটি jQuery আইডি নির্বাচনকারী ব্যবহার করতে পারবেন না। একটি বৈশিষ্ট্য নির্বাচনকারী ব্যবহার করুন:

$('[id=foo bar]').show();

যদি সম্ভব হয় তবে এলিমেন্টের ধরনটিও উল্লেখ করুন:

$('div[id=foo bar]').show();

আমি পালানোর চরিত্রগুলি ব্যবহারের চেয়ে এইভাবে এটি করতে পছন্দ করি .... অবশ্যই আইডিতে পিরিয়ড ব্যবহার না করা সবচেয়ে ভাল কাজ।
গর্ডনবি

এইচটিএমএল-তে এমনকি অক্ষরগুলির আরও উদার স্বীকৃতিতেও আইডিতে স্পেসগুলি অনুমোদিত নয়। stackoverflow.com/questions/70579/…
জয় ব্লানচার্ড

সত্য, তবে তাদের অনুমতি দেওয়া হোক বা না থাকুক, 90s এর দশকের শেষভাগে মোতায়েন করা দুর্বল লিখিত ওয়েব অ্যাপ্লিকেশনটিতে উইন্ডো ড্রেসিং যুক্ত করে আটকা পড়ে থাকা দরিদ্র স্যাপের পক্ষে তাতে কিছু আসে যায় না।
এলিয়ট নেলসন

4
কাজ করার জন্য অবশ্যই কোয়েট থাকতে হবে: `$ (" div [id = '"+ ভেরিয়েবল +"'] ")` বা `$ (" ডিভ [আইডি = 'ফু বার'] ")`
ওলগা

যেমন @ ওলগা বলেছে, উত্তর আর আইনী নয়। বিশেষত, আপনি একটি ত্রুটি বার্তা পাবেন "অচেনা ত্রুটি: সিনট্যাক্স ত্রুটি, অজানা অভিব্যক্তি: ডিভ [আইডি = ফু বার]"
জেমস মুর

13

জ্যাকুরির জন্য এটি এড়িয়ে চলুন:

function escapeSelector(s){
    return s.replace( /(:|\.|\[|\])/g, "\\$1" );
}

ব্যবহারের উদাহরণ:

e.find('option[value='+escapeSelector(val)+']')

আরও তথ্য এখানে


2
JQuery ডক্স অনুসারে সমাধানটি কেবল একটি "\" (স্ল্যাশ) যুক্ত করছে। সতর্কতা (escapeSelector ( "some.id")); কিছু output .id হিসাবে আউটপুট হবে। সুতরাং আমি অনুমান করি যে প্রতিস্থাপনের রেজেক্সটি s.replace হওয়া উচিত (/(:(
অরুণ

আমার একই সমস্যা আছে, অন্য কেউ কেন এটি দেখতে পাচ্ছে না?
Of42

9

স্রেফ প্রকাশিত এএসপি.এনইটি এমভিসির রিলিজ প্রার্থী এই সমস্যাটিকে স্থির করে, এটি এখন আইডির বৈশিষ্ট্যের জন্য ডটগুলি আন্ডারস্কোর দিয়ে প্রতিস্থাপন করে।

<%= Html.TextBox("Person.FirstName") %>

রেন্ডার

<input type="text" name="Person.FirstName" id="Person_FirstName" />

আরও তথ্যের জন্য 14 পৃষ্ঠা থেকে শুরু করে রিলিজ নোটগুলি দেখুন।


1
এটি কীভাবে "ফিক্স" হয় তা আমি দেখতে ব্যর্থ হয়েছি - কেন এএসপি.নেট এমভিসির আইডিকে jQuery প্রয়োজনীয় কিছুতে পরিবর্তন করতে হবে? আমি মনে করি jQuery এমনই যেখানে সমস্যাটি রয়েছে, একটি ব্যবহার না করে। একটি আইডিতে
জেসন বুটিং

7
ক্লাস শনাক্ত / সংযুক্ত করার জন্য সিএসএসে ডটটির বিশেষ অর্থ রয়েছে, এজন্য আইডিতে এটি রাখা কষ্টকর। "সমস্যা" jquery সঙ্গে নয়।
ফানকা

4

এটি jQuery সিলেক্টর ডক্সে নথিভুক্ত করা হয়েছে :

মেটা-অক্ষর (যেমন ব্যবহারের !"#$%&'()*+,./:;<=>?@[\]^`{|}~) একটি নামের একটি আক্ষরিক অংশ হিসেবে এটিকে দুটি ব্যাকস্ল্যাশ সঙ্গে পলান করতে হবে: \\। উদাহরণস্বরূপ, এর সাথে একটি উপাদান id="foo.bar"নির্বাচকটি ব্যবহার করতে পারে $("#foo\\.bar")

সংক্ষেপে বলতে গেলে, প্রেফিক্স .সঙ্গে \\নিম্নরূপ:

$("#Address\\.Country")

কেন হয় না .আমার আইডিতে কাজ ?

সমস্যাটি .এর বিশেষ তাত্পর্য রয়েছে, নিম্নলিখিত স্ট্রিংটি শ্রেণি নির্বাচক হিসাবে ব্যাখ্যা করা হয়। তাই $('#Address.Country')মেলে <div id="Address" class="Country">

যখন পালানো \\.হবে, তখন বিন্দুটিকে কোনও বিশেষ তাত্পর্য না রেখে সাধারণ পাঠ্য হিসাবে বিবেচনা করা হবে, আপনার ইচ্ছা অনুযায়ী আইডিটি মিলবে <div id="Address.Country">

এটি এমন সমস্ত চরিত্রের জন্য প্রযোজ্য !"#$%&'()*+,./:;<=>?@[\]^`{|}~যা jQuery এ নির্বাচক হিসাবে অন্যথায় বিশেষ তাত্পর্য রাখে। \\এগুলিকে সাধারণ পাঠ্য হিসাবে বিবেচনা করার জন্য কেবল প্রস্তুত করুন ।

কেন 2 \\?

বিডুকস উত্তরে উল্লিখিত হিসাবে, আমাদের 2 টি \অক্ষরের প্রয়োজনের একটি কারণ রয়েছে । \জাভাস্ক্রিপ্ট নিম্নলিখিত অক্ষর এড়ানো হবে। যখন জাভাস্ক্রিপ্ট স্ট্রিংটির ব্যাখ্যা করে "#Address\.Country", এটি নীচের অক্ষরটিকে লিটারালিভাবে গ্রহণ\ করার অর্থ এটি ব্যাখ্যা করবে এবং স্ট্রিংটি যখন আর্গুমেন্ট হিসাবে প্রেরণ করা হবে তখন এটি মুছে ফেলবে । এর অর্থ jQuery এখনও স্ট্রিংটি দেখতে পাবে$()"#Address.Country"

দ্বিতীয়টি \খেলতে আসে That's প্রথমটি জাভাস্ক্রিপ্টকে দ্বিতীয়টিকে আক্ষরিক (অ-বিশেষ) চরিত্র হিসাবে ব্যাখ্যা করতে বলে। এর অর্থ দ্বিতীয়টি jQuery দ্বারা দেখা হবে এবং বুঝতে পারবেন যে নিম্নলিখিত . অক্ষরটি একটি আক্ষরিক চরিত্র।

রাম রাম! আমরা এটি কল্পনা করতে পারি।

//    Javascript, the following \ is not special.
//         | 
//         |
//         v    
$("#Address\\.Country");
//          ^ 
//          |
//          |
//      jQuery, the following . is not special.

2

দুটি ব্যাকস্ল্যাশ ব্যবহার করা ঠিক আছে, এটি কাজ করে। তবে আপনি যদি একটি গতিশীল নাম ব্যবহার করে থাকেন তবে আমি বলতে চাইছি একটি পরিবর্তনশীল নাম, আপনার অক্ষরগুলি প্রতিস্থাপন করতে হবে।

আপনি যদি নিজের ভেরিয়েবলের নাম পরিবর্তন করতে না চান তবে আপনি এটি করতে পারেন:

var variable="namewith.andother";    
var jqueryObj = $(document.getElementById(variable));

এবং আপনার jquery অবজেক্টের চেয়ে বেশি।


0

কেবলমাত্র অতিরিক্ত তথ্য: এই ASP.NET এমভিসি ইস্যুটি # 2403 দেখুন

ইস্যুটি স্থির না হওয়া পর্যন্ত আমি আমার নিজস্ব এক্সটেনশন পদ্ধতিগুলি ব্যবহার করি যেমন এইচটিএমএল.টেক্সটবক্সফিক্সড ইত্যাদি that তবে সার্ভারে এটি অ্যাড্রেস.স্ট্রিটের মতো।

নমুনা কোড অনুসরণ:

public static string TextBoxFixed(this HtmlHelper html, string name, string value)
{
    return html.TextBox(name, value, GetIdAttributeObject(name));
}

public static string TextBoxFixed(this HtmlHelper html, string name, string value, object htmlAttributes)
{
    return html.TextBox(name, value, GetIdAttributeObject(name, htmlAttributes));
}

private static IDictionary<string, object> GetIdAttributeObject(string name)
{
    Dictionary<string, object> list = new Dictionary<string, object>(1);
    list["id"] = name.Replace('.', '_');
    return list;
}

private static IDictionary<string, object> GetIdAttributeObject(string name, object baseObject)
{
    Dictionary<string, object> list = new Dictionary<string, object>();
    list.LoadFrom(baseObject);
    list["id"] = name.Replace('.', '_');
    return list;
}

1
উপরোক্ত ইস্যু থেকে: "আপডেটমোডেল () বিন্দু ব্যবহার করে কারণ ফর্ম উপাদানগুলি কীভাবে আসে The ফর্ম উপাদানগুলি একটি বিন্দু ব্যবহার করে কারণ এটি এইচটিএমএল সহায়ক সহায়ক কলগুলিতে নির্দিষ্ট করা হয়েছে The এইচটিএমএল সহায়ক সহায়ক কলগুলি একটি বিন্দু ব্যবহার করে কারণ কীভাবে ভিউডাটা.এভাল () কাজ করে Finally পরিশেষে, ভিউডাটা.এভাল () একটি বিন্দু ব্যবহার করে কারণ এটি কীভাবে একটি .NET ফ্রেমওয়ার্ক ভাষায় কোনও বস্তু এবং তার সম্পত্তি পৃথক করে। এই শৃঙ্খলে যে কোনও বিন্দুতে বিন্দু ব্যতীত অন্য একটি ডিলিমিটার ব্যবহার ভেঙে যাবে পুরো চেইনের জন্য প্রবাহ। "
সাইমন_ ওয়েভার

0

আমি jquery ডক্স দ্বারা প্রদত্ত সমাধানটি দিয়ে সমস্যার সমাধান করেছি

আমার ফাংশন:

//funcion to replace special chars in ID of  HTML tag

function jq(myid){


//return "#" + myid.replace( /(:|\.|\[|\]|,)/g, "\\$1" );
return myid.replace( /(:|\.|\[|\]|,)/g, "\\$1" );


}

দ্রষ্টব্য: আমি "#" অপসারণ করি কারণ আমার কোডে আমি অন্য পাঠ্য সহ আইডিটি কনক্ট করি

হরফ: জ্যাকারি ডক্স বিশেষ বর্ণগুলি সহ উপাদান নির্বাচন করে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.