jQuery और जावास्क्रिप्ट के लिए बहुत नया है तो कृपया सौम्य रहें ...यदि सूचकांक स्थिति में आइटम मौजूद है तो जावास्क्रिप्ट सरणी को कैसे अपडेट करें?
मैं एक "कॉलम मैपिंग" पृष्ठ बनाने के लिए एक पीओसी पर काम कर रहा हूं जहां उपयोगकर्ता "कॉलम हेडर" की सूची खींचने और छोड़ने में सक्षम है नए कॉलम हेडर का ग्रिड। मुझे एक सरणी बनाने की ज़रूरत है जिसे मैं एक SQL डेटाबेस पर वापस भेज सकता हूं। मेरे पास यह हिस्सा है (ज्यादातर) काम कर रहा है कि मैं कैसे चाहूंगा।
जब आइटम को दाईं ओर हेडर ग्रिड पर बाईं ओर कॉलम सूची से खींचा जाता है, यदि आइटम मौजूद है, तो कोड उस इंडेक्स पर सरणी आइटम को अपडेट/प्रतिस्थापित करना चाहिए। यदि आइटम मौजूद नहीं है, तो उसे आइटम को सरणी में जोड़ना चाहिए।
उदाहरण के लिए: यदि आप "हेडर" में "पहला नाम" खींचते हैं तो इसे इंडेक्स स्थिति 0 पर जोड़ा जाना चाहिए। यदि आप "पहले नाम" को "साथ" खींचें तो इसे इंडेक्स पर "फर्स्ट नेम" मान हटा देना चाहिए 0 और स्थिति 1 पर मान जोड़ें। यदि आप "अंतिम नाम" को "साथ" खींचें तो इसे "अंतिम नाम" मान के साथ स्थिति 1 पर सरणी को अद्यतन करना चाहिए।
$(document).ready(() => {
$(function() {
$('.item').draggable({
cursor: "crosshair",
cursorAt: {
left: 5
},
distance: 10,
opacity: 0.75,
revert: true,
snap: ".target",
containment: "window"
});
});
$(function() {
var array = [];
var arraytext = '';
$('.target').droppable({
accept: ".item",
tolerance: 'pointer',
activeClass: 'active',
hoverClass: 'highlight',
drop: function(event, ui) {
var dropped = $(this);
var dragged = $(ui.draggable);
$(function(index, item) {
var test = '';
array.push($(dragged).text());
arraytext = JSON.stringify(array);
test += "Index Value = " + $(dropped).index() + ", Text = " + $(dragged).text() + "<br/>";
$('#test').html(test);
$('#array').text(arraytext);
});
}
});
});
});
#container {
border: solid black 1px;
margin: 0 auto;
height: 800px;
}
#gridview {
border: 2px solid #292da0;
border-radius: 5px;
background-color: #7577a3;
display: grid;
grid-template-columns: repeat(auto-fit, 100px);
grid-template-rows: auto;
margin-left: 105px;
}
.target {
border: 2px solid #1c1c3a;
border-radius: 5px;
background-color: #a7a7ef;
padding: 1em;
}
#flex {
border: 2px solid #292da0;
border-radius: 5px;
width: 100px;
background-color: #7577a3;
display: flex;
flex-flow: column wrap;
justify-content: flex-end;
float: left;
}
.item {
border: 2px solid #1c1c3a;
border-radius: 5px;
background-color: #a7a7ef;
padding: 1em;
}
.active {
background-color: blue;
color: white;
border: 2px solid black;
}
.highlight {
background-color: yellow;
color: black;
border: 2px solid blue;
}
.table {
border: solid black 1px;
width: 86px;
padding: 5px;
}
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<div id="container">
Test:
<div id="test">
</div>
Array:
<div id="array">
</div>
<div id="gridview">
<div class="target">Headers</div>
<div class="target">with</div>
<div class="target">different</div>
<div class="target">column</div>
<div class="target">names</div>
</div>
<span>
<div id="flex">
<div class="item">First Name</div>
<div class="item">Last Name</div>
<div class="item">Code</div>
<div class="item">Date</div>
<div class="item">Amount</div>
</div>
<table>
<thead>
<tr>
<td class="table">Some</td>
<td class="table">Column</td>
<td class="table">Data</td>
<td class="table">Goes</td>
<td class="table">Here</td>
</tr>
</thead>
<tr>
<td class="table">Other Data</td>
<td class="table">Other Data</td>
<td class="table">Other Data</td>
<td class="table">Other Data</td>
<td class="table">Other Data</td>
</tr>
</table>
</span>
</div>
JSFiddle: https://jsfiddle.net/qxwzcn9w/4/
अंततः मैं सूचक मान वापस डेटाबेस के लिए तो बोनस अंक भेज देंगे अगर आप किसी भी लाल झंडे या "gotchas" नोटिस। धन्यवाद!
ऐसा लगता है कि जू हैं एस सरणी में मूल्य धक्का। यदि आप इसके बजाय मान जोड़ते हैं: सरणी [अनुक्रमणिका] = मान, जो आपको वह चाहिए जो आपको चाहिए। असाइन किए गए मानों के बीच असाइन किए गए इंडेक्स स्वचालित रूप से अपरिभाषित पर सेट हो जाएंगे, इसलिए डेटाबेस को उस से संभालने में सक्षम होना चाहिए, जो उम्मीद से कम है। – Chairs
आइडिया: क्या है, यदि आप ड्रॉप करने पर जांचते हैं कि कौन सा तत्व रखा गया है और फिर "प्रथम नाम" मान को "प्रथम नाम" मान 0 पर सेट किया गया है और यदि "पहला नाम" सरणी के साथ "खींचा" है "फर्स्ट नेम" का मान 1 पर सेट किया गया है और सभी सबमिट बटन के बाद सरणी से पदों को पढ़ते हैं और इसे डीबी पर भेजते हैं। मुझे उम्मीद है कि यह समझने योग्य ^^ –
@ अध्यक्ष प्रतिक्रिया के लिए धन्यवाद। मुझे लगता है कि आप समाधान पर हैं। क्या ग्रिडव्यू div में तत्वों की संख्या के आधार पर कई अनुक्रमणिका/खाली तारों के साथ सरणी बनाने का कोई तरीका है? –